82ptsWA 求助 悬赏1关注
查看原帖
82ptsWA 求助 悬赏1关注
743811
Shakespeare07楼主2022/10/28 21:15

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;
}
2022/10/28 21:15
加载中...