【题目分析】
是一道很典型的滑动区间的题目,用来练习STL了。
【代码】
set:
#include <cstdio>
#include <algorithm>
#include <set>
using namespace std;
int a[1000001];
int main()
{
int tt;
scanf("%d",&tt);
while (tt--)
{
int n;
scanf("%d",&n);
for (int i=0;i<n;++i) scanf("%d",&a[i]);
set <int> s;
int l=0,r=0,ans=0;
while (r<n)
{
while (r<n&&!s.count(a[r])) s.insert(a[r++]);
ans=max(ans,r-l);
s.erase(a[l++]);
}
printf("%d\n",ans);
}
return 0;
}
map:
#include <cstdio>
#include <map>
using namespace std;
int a[1000001],last[1000001];
int main()
{
int tt;
scanf("%d",&tt);
while (tt--)
{
map <int,int> cur;
int n;
scanf("%d",&n);
for (int i=0;i<n;++i)
{
scanf("%d",&a[i]);
if (!cur.count(a[i])) last[i]=-1;
else last[i]=cur[a[i]];
cur[a[i]]=i;
}
int l=0,r=0,ans=0;
while (r<n)
{
while (r<n&&last[r]<l) r++;
ans=max(ans,r-l);
l++;
}
printf("%d\n",ans);
}
return 0;
}