QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#790840 | #8704. 排队 | QOJ114514ancestor | 0 | 0ms | 0kb | C++14 | 2.2kb | 2024-11-28 15:40:21 | 2024-11-28 15:40:22 |
answer
#include<bits/stdc++.h>
#define int long long
#define N 600005
#define ls tr[u].lss
#define rs tr[u].rss
using namespace std;
int sub,rt,n=1,q,p[N];
set<int> sns[N];
mt19937 rnd(114514);
struct node{int fa,pr,sz,szz,lss,rss;}tr[N];
void nnd(int u){tr[u]=(node){0,rnd(),1,u<=q,0,0};}
int pu(int u){
return tr[u].sz=tr[ls].sz+tr[rs].sz+1,
tr[u].szz=tr[ls].szz+tr[rs].szz+(u<=q),
tr[ls].fa=u,tr[rs].fa=u,tr[u].fa=0,u;}
int mrg(int u,int v){
if(!min(u,v))return u+v;
if(tr[u].pr<tr[v].pr)return rs=mrg(rs,v),pu(u);
return swap(u,v),ls=mrg(v,ls),pu(u);
}
pair<int,int> spt(int u,int sz){
if(!u)return make_pair(0,0);
if(sz<=tr[ls].sz){
auto [a,b]=spt(ls,sz);
return ls=b,make_pair(a,pu(u));
}
auto [a,b]=spt(rs,sz-tr[ls].sz-1);
return rs=a,make_pair(pu(u),b);
}
void ist(int sz,int u){auto [a,b]=spt(rt,sz);rt=mrg(a,mrg(u,b));}
int rk(int u,int op=1){
int r=(op|(u<=q))+(op?tr[ls].sz:tr[ls].szz),lst=u;
while(lst=u,u=tr[u].fa)
if(lst==rs)r+=(op|(u<=q))+(op?tr[ls].sz:tr[ls].szz);
return r;
}
void solve(){
cin>>sub>>q,++q;
for(int i=1;i<=2*q;i++)nnd(i);
rt=mrg(1,q+1);
for(int op,i,x,y,z,qi=1;qi<q;qi++){
// for(int z=1;z<=n;z++)cerr<<rk(z,0)-1<<' ';
// cerr<<'\n';
// for(int z=1;z<=n;z++)cerr<<rk(z)<<' '<<rk(z+q)<<" ";
// cerr<<'\n';
// for(int z=1;z<=n;z++)cerr<<tr[z].fa<<' '<<tr[z+q].fa<<" ";
// cerr<<'\n';
// for(int z=1;z<=n;z++)cerr<<tr[z].sz<<' '<<tr[z+q].sz<<" ";
// cerr<<'\n';
// for(int z=1;z<=n;z++)cerr<<tr[z].lss<<' '<<tr[z].rss<<' '<<tr[z+q].lss<<' '<<tr[z+q].rss<<" ";
// cerr<<'\n';
cin>>op;
if(op==1)cin>>x,++x,p[++n]=x,sns[x].insert(n),ist(rk(x),mrg(n,n+q));
else if(op==2){
cin>>i>>y,++i,++y,x=p[i],p[i]=y;
sns[x].erase(i),sns[y].insert(i);
int l=rk(i),r=rk(i+q);
auto [a,bc]=spt(rt,l-1);
auto [b,c]=spt(bc,r-l+1);
rt=mrg(a,c);
auto it=next(sns[y].find(i));
if(it==sns[y].end())ist(rk(y),b);
else ist(rk((*it)+q),b);
}
else cin>>z,++z,cout<<rk(z,0)-1<<'\n';
}
}
signed main(){
freopen("a.in","r",stdin);
freopen("a.out","w",stdout);
cin.tie(0)->sync_with_stdio(0);
int T=1;//cin>>T;
while(T--)solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Dangerous Syscalls
Test #1:
score: 0
Dangerous Syscalls
input:
0 8 1 0 1 1 1 2 3 2 2 2 0 3 1 3 2 3 3
output:
result:
Subtask #2:
score: 0
Dangerous Syscalls
Test #5:
score: 0
Dangerous Syscalls
input:
1 298913 1 0 3 1 3 1 3 1 3 1 3 1 1 0 1 0 3 3 1 2 1 2 3 5 3 5 1 1 1 3 1 4 3 3 1 3 1 6 3 7 3 2 3 5 3 8 3 2 1 8 3 3 1 4 3 2 3 7 1 3 3 4 1 10 3 14 3 13 1 12 3 4 1 8 1 15 1 16 3 9 3 14 3 10 3 8 3 7 1 16 1 15 3 16 3 13 1 19 3 13 3 1 3 14 1 18 1 22 3 8 1 17 3 18 3 9 1 18 3 9 3 1 1 20 3 11 3 5 3 2 3 22 1 22...
output:
result:
Subtask #3:
score: 0
Dangerous Syscalls
Test #20:
score: 0
Dangerous Syscalls
input:
2 298235 1 0 1 1 3 2 1 0 1 3 3 4 3 3 3 3 3 2 3 4 3 2 3 3 1 2 3 3 1 4 1 2 1 1 3 5 3 8 1 5 1 9 3 10 3 8 3 10 3 5 3 8 3 5 1 2 1 9 3 5 3 7 3 12 3 3 1 6 3 4 3 3 3 11 3 8 3 9 3 7 3 6 3 4 1 12 1 11 3 13 3 13 1 11 3 16 3 6 3 14 3 9 3 5 3 13 1 9 1 17 3 16 3 13 3 5 3 15 3 8 3 4 3 13 1 18 3 15 3 16 3 19 3 4 1 ...
output:
result:
Subtask #4:
score: 0
Dangerous Syscalls
Test #35:
score: 0
Dangerous Syscalls
input:
3 299743 1 0 1 1 3 1 1 2 3 2 1 0 3 3 3 2 3 1 3 2 2 2 1 3 3 3 3 3 4 3 1 3 2 3 2 2 1 0 3 2 3 1 3 1 1 0 3 2 1 2 1 1 3 2 2 5 2 1 6 1 0 2 5 2 1 7 3 8 3 5 3 5 2 7 5 2 9 4 3 5 3 8 2 6 2 2 3 0 2 2 0 1 1 2 3 1 1 8 2 7 0 3 3 1 12 2 13 9 1 5 2 2 1 2 14 13 1 12 2 1 0 2 12 10 2 15 12 1 0 1 6 3 6 2 3 2 2 17 6 3 4...
output:
result:
Subtask #5:
score: 0
Skipped
Dependency #1:
0%