#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
const int MAX=2e6+5,P=1145141919810;
int t,n,b[MAX],a[MAX],q[MAX];
map<pair<int,int>,int>h;
signed main(){
srand((unsigned)time(0));
cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++)b[i]=rand()%P+1;
for(int i=1;i<=n;i++)cin>>a[i];
int ans=0,x1=a[1],x2=a[1],top=1;
q[1]=a[1],h[make_pair(x1,x2)]=1,h[make_pair(0,0)]=1;
for(int i=1;i<=n;i++){
if(q[top]==a[i]){
x1^=(a[i]*b[top]);
x2-=a[i]^b[top];
top--;
}
else {
q[++top]=a[i];
x1^=(a[i]*b[top]);
x2+=a[i]^b[top];
}
ans+=h[make_pair(x1,x2)];
h[make_pair(x1,x2)]++;
}
cout<<ans<<endl;
}
return 0;
}
第二篇题解的思路,照搬哈希方法(自己写的哈希挂飞了qwq)