紫书上说的很好了。
set
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
vector<int>vec;
int temp;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
vec.push_back(temp);
}
int l,r;
l=r=0;
set<int>s;
int MAX=1;
while(r<n)
{
while(r<n&&!s.count(vec[r]))
{
s.insert(vec[r]);
r++;
}
MAX=max(MAX,r-l);
s.erase(vec[l]);
l++;
}
printf("%d\n",MAX);
}
return 0;
}
map
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int temp;
map<int,int>cur;
map<int,int>last;
for(int i=0;i<n;i++)
{
scanf("%d",&temp);
if(cur.count(temp)) last[i]=cur[temp];
else last[i]=-1;
cur[temp]=i;
}
int l,r,ans;
l=r=ans=0;
while(r<n)
{
while(r<n&&last[r]<l) r++;
ans=max(ans,r-l);
l++;
}
printf("%d\n",ans);
}
return 0;
}