题意:给定一个序列,然后在这个序列找到一个连续的串,使得串中没有重复的元素。
思路:单调队列。每次都把该在序列没出现的数加入到序列中,然后向后扫描找到最大的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);
}
}