//尺取法,类似于滑动窗口的思想,这里的st数组运用了桶的思想
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10,M=2e3+10;
int a[N],st[M];
//st数组表示第a[i]个画家的作品访问的次数
int main()
{
int n,m,k,l,r,ans=1000010,ll,rr;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
l=1,r=1,k=1,st[1]=1;
while(l<=r&&r<=n)
{
if(k==m){
if(ans>r-l+1)
{
ans=r-l+1;
ll=l;
rr=r;
}
st[a[l]]--;
if(!st[a[l]]) k--;
l++;
}else{
r++;
st[a[r]]++;
if(st[a[r]]==1) k++;
}
}
printf("%d %d",ll,rr);
return 0;
}
洛谷P1638 逛画展
本文介绍了一个基于尺取法和桶思想的C++算法,用于解决画家作品访问次数的问题,通过滑动窗口的方式找到最优解。
摘要由CSDN通过智能技术生成