rt.
思路为双指针,代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[1000005],tong[1000005];
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i) cin>>a[i];
int l=1,r=0,tot=0,ans1=1,ans2=n;
for(;l<=n;++l){
while(tot<m && r<=n){
tong[a[r]]++;
if(tong[a[r]]==1 && a[r]) ++tot;
if(tot==m) break;
r++;
}
if(tot!=m) break;
if(r-l+1<ans2-ans1+1 && r-l+1>0){
ans1=l,ans2=r;
}
tong[a[l]]--;
if(!tong[a[l]]) tot--;
}
cout<<ans1<<" "<<ans2<<endl;
return 0;
}