样例过了,可是提交之后re
#include<bits/stdc++.h>
using namespace std;
struct node
{
bool chu;//之前出没出现过
int id;//第一次出现是在哪
};
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
map<string,node>mp;
string a[n+5]={};
for(int i=1;i<=n;i++)
{
cin>>a[i];
mp[a[i]].chu=true;
mp[a[i]].id=-1;
}
int m;
cin>>m;
for(int j=1;j<=m;j++)
{
int x,y;
cin>>x>>y;
string s="0";
for(int z=x;z<=y;z++)
{
if(mp[a[z]].chu==true)//如果是第一次出现
{
s+=a[z];
mp[a[z]].chu=false;
mp[a[z]].id=z;
}
else if(mp[a[z]].chu==false)//如果已经出现过
{
s+=a[z];
int len=s.size();
int len1=mp[a[z]].id,len2=len-mp[a[z]].id;//len1为这个重复的数第一次出现时的下标
for(int k=len1;k<=len;k++)
{
mp[a[k]].chu=true;
}
s.erase(len1,len2+1);//删除
//mp[a[z]].chu==true;
}
}
cout<<s.size()-1<<endl;
for(int c=x;c<=y;c++)
mp[a[c]].chu=true;
}
}
return 0;
}