QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#746542 | #9482. Count Pseudo-Palindromes | Acoipp | WA | 0ms | 40504kb | C++14 | 2.0kb | 2024-11-14 14:57:42 | 2024-11-14 14:57:42 |
Judging History
answer
#include<bits/stdc++.h>
#define ll long long
#define N 1000005
using namespace std;
inline char nc(){
static char buf[1000000],*p=buf,*q=buf;
return p==q&&(q=(p=buf)+fread(buf,1,1000000,stdin),p==q)?EOF:*p++;
}
inline ll read(){
ll res = 0,w = 1;
char c = nc();
while(c<'0'||c>'9')w=(c=='-'?-1:w),c=nc();
while(c<='9'&&c>='0')res=res*10+c-'0',c=nc();
return res*w;
}
char obuf[1<<21],*p3=obuf;
inline void pc(char c){
p3-obuf<=(1<<20)?(*p3++=c):(fwrite(obuf,p3-obuf,1,stdout),p3=obuf,*p3++=c);
}
inline void write(ll x){
if(x<0) pc('-'),x=-x;
if(x>9) write(x/10);
pc(x%10+'0');
}
vector<pair<ll,ll> > op[N];
ll n,i,j,a[N],ls[N],rs[N],to[N],lseq[N],rseq[N],tor[N],tol[N],ans[N],num[N],qzh[N];
priority_queue<ll> que,emp;
mt19937_64 rnd_64(time(0));
map<ll,ll> nums;
int main(){
n=read();
for(i=1;i<=n;i++) num[i]=rnd_64()%1000000000000000000+1;
for(i=1;i<=2*n;i++){
a[i]=read();
if(!ls[a[i]]) ls[a[i]]=i;
else rs[a[i]]=i,tol[i]=ls[a[i]],tor[ls[a[i]]]=i;
}
for(i=1,que=emp;i<=2*n;i++){
while(que.size()&&tor[que.top()]<=i) que.pop();
if(que.size()) lseq[i]=que.top();
if(tor[i]) que.push(i);
}
for(i=2*n,que=emp;i>=1;i--){
while(que.size()&&tol[-que.top()]>=i) que.pop();
if(que.size()) rseq[i]=-que.top();
if(tol[i]) que.push(-i);
}
for(i=1;i<=2*n;i++) qzh[i]=(qzh[i-1]^num[a[i]]);
for(i=1;i<=2*n;i++) op[i].clear();
for(i=1;i<=2*n;i++) if(lseq[i]) op[lseq[i]].push_back(make_pair(i,rs[a[lseq[i]]]));
nums.clear(),nums[0]=1;
for(i=1;i<=2*n;nums[qzh[i]]++,i++) for(j=0;j<op[i].size();j++) ans[i]+=nums[qzh[op[i][j].first]^num[a[i]]];
for(i=2*n;i>=1;i--) qzh[i]=(qzh[i+1]^num[a[i]]);
for(i=1;i<=2*n;i++) op[i].clear();
for(i=1;i<=2*n;i++) if(rseq[i]) op[rseq[i]].push_back(make_pair(i,ls[a[rseq[i]]]));
nums.clear(),nums[0]=1;
for(i=2*n;i>=1;nums[qzh[i]]++,i--) for(j=0;j<op[i].size();j++) ans[i]+=nums[qzh[op[i][j].first]^num[a[i]]];
for(i=1;i<=2*n;i++) write(ans[i]+1),pc(' ');
pc('\n');
return fwrite(obuf,p3-obuf,1,stdout),0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 40504kb
input:
2 1 1 2 2
output:
1 1 1 1
result:
wrong answer 2nd words differ - expected: '2', found: '1'