思路:
因为画家只有2000个,所以可以用哈希来做,记录区域内每个画家有几幅画。
先定义l,r代表a,b,不断向右移动,并通过统计新画家的画,减去左边画家的画来计算是否看到了所有画家的画。
记录(l-r+1)最少值。
输出。
代码:
#include
using namespace std;
const int N=1e6+5;
int n,m;
int a[N];
int num[2005],cnt;//cnt:统计画家数量
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int l=1,r=1;
num[a[1]]++;
cnt=1;
// a,b的合适值,l,r最小差
int posa=1,posb=n,mins=n;
//右端点
while(r
while(r
num[a[++r]]++;
if(num[a[r]]==1){
cnt++;
}
}
//左端点
while(l
if(r-l+1 mins=r-l+1; posa=l; posb=r; } num[a[l]]--; if(num[a[l]]==0) cnt--; l++; } } cout< return 0; } 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)