题意:给定一个序列,然后在这个序列找到一个连续的串,使得串中没有重复的元素。
思路:单调队列。每次都把该在序列没出现的数加入到序列中,然后向后扫描找到最大的ans。
code:
//#incllude <bits/stdc++.h>
//#include<bits/stdc++.h>
#include <cstdio>
#include <set>
using namespace std;const int N=1000005;
int v[N];int main()
{int T,n;scanf("%d",&T);while (T--){scanf("%d",&n);for (int i=0;i<n;i++) scanf("%d",&v[i]);set<int>s;int l=0,r=0,ans=0;while(l<n){while (r<n&&!s.count(v[r])) s.insert(v[r++]);ans=max(ans,r-l);s.erase(v[l++]);}printf("%d\n",ans);}
}