P1638 逛画展

原题链接

反思,debug不出来就赶紧看题解把!

题解

双指针,双指针有好几种,这个是像弹簧(窗口)一样的双指针,右指针一直往右走,当成立时,左指针一直往左走直到不成立

code

#include<bits/stdc++.h>
using namespace std;
int a[1000006]={0};
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>a[i];
    map<int,int> cnt;
    int l=1,minlen=n+1,ends,uni=0,start;
    for(int i=1;i<=n;i++)
    {
        if(cnt[a[i]]++==0)uni++;
        while(uni==m)
        {
            if(i-l+1<minlen)
            {
                minlen=i-l+1;
                start=l;
                ends=i;
            }
            if(--cnt[a[l++]]==0)uni--;
        }
    }
    cout<<start<<" "<<ends;
    return 0;
}

posted @   纯粹的  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示