水题,用到STL map,还是得细心点,不要少写了逻辑上应该的操作。
代码:
#include<iostream>
#include<map>
using namespace std;
map<int,int>ElementStore;
int main()
{
int n,m;
scanf("%d",&n);
while(n--)
{
int maxlen=-1;
int curpos=0;
int tmplen=0;
ElementStore.clear();
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int tmp;
scanf("%d",&tmp);
if(ElementStore.size()&&ElementStore.find(tmp)!=ElementStore.end())
{
int tmpcur=ElementStore.find(tmp)->second;
ElementStore.erase(tmp);
if(tmpcur>=curpos)
{
maxlen<tmplen?maxlen=tmplen:maxlen;
tmplen=i-tmpcur;
curpos=tmpcur+1;
}
else
tmplen++;
}
else
tmplen++;
ElementStore.insert(pair<int,int>(tmp,i));
}
maxlen<tmplen?maxlen=tmplen:maxlen;
printf("%d\n",maxlen);
}
}