uva11572 Unique Snowflakes

参考这里

题意:求没有重复数字的最长区间

首先向右延申 (r++),当有重复发生时,更新答案,l ++ & 删除直到重复元素,然后继续 r++ 。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const int MAX=1000000+10;
int t,n,a[MAX],ans,l,r;
map<int,int> cnt;
int main(){
freopen("in","r",stdin);
sf(t);
while(t--){
sf(n);
fi(i,1,n+1)
sf(a[i]);
ans=1,l=1,r=2;
cnt.clear();
cnt[a[l]]++,cnt[a[r]]++;
for (;r<=n;){
while (cnt[a[r]]>1) cnt[a[l++]]--;
ans=max(ans,r>n?r-l:r-l+1);
cnt[a[++r]]++;
}
pfn(ans);
}
return 0;
}