91分求助:(
  • 板块P1638 逛画展
  • 楼主c______
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/8/20 13:40
  • 上次更新2023/11/3 02:28:52
查看原帖
91分求助:(
765954
c______楼主2023/8/20 13:40

第五个点WA了

这里

下面是代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int a[N],vis[2005];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    int low=m-1,high=n,ansl,ansr;
    while(low<high-1)
    {
        int mid=(low+high)/2;
        bool f=0;
        int cnt=0;
        memset(vis,0,sizeof(vis));
        for(int r=1;r<=n;r++)
        {
            vis[a[r]]++;
            if(vis[a[r]]==1)
                cnt++;
            if(r>mid)
            {
                vis[a[r-mid]]--;
                if(vis[a[r-mid]]==0)
                    cnt--;
            }
            if(cnt==m)
            {
                f=1,ansr=r,ansl=r-mid+1;
                break;
            }
        }
        if(f==0)
            low=mid;
        else high=mid;
    }
    cout<<ansl<<" "<<ansr;
    return 0;
}
2023/8/20 13:40
加载中...