文章

9

粉丝

40

获赞

25

访问

1.8k

头像
逛画展 题解:
P1591
发布于2025年2月11日 17:35
阅读数 65

滑动窗口

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int x[N];

int main(){
    int n,m;
    while(cin>>n>>m){
        for(int i = 1;i <= n;i ++)
            cin>>x[i];
        map<int,int> mp;
        int l = 1,r = 1,minlen = n;
        int ll = 1,rr = n;
        while(r <= n){
            if(mp.find(x[r]) == mp.end()) mp.insert({x[r],1});
            else mp[x[r]] ++;
            while(mp.size() == m){
                if(r-l+1 < minlen){
                    ll = l;
                    rr = r;
                    minlen = r-l+1;
                }
                mp[x[l]] --;
                if(mp[x[l]] == 0) mp.erase(x[l]);
                l ++;
            }
            r ++;
        }
        cout<<ll<<" "<<rr<<endl;
    }
    return 0;

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发