QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#790840#8704. 排队QOJ114514ancestor0 0ms0kbC++142.2kb2024-11-28 15:40:212024-11-28 15:40:22

Judging History

你现在查看的是最新测评结果

  • [2024-11-28 15:40:22]
  • 评测
  • 测评结果:0
  • 用时:0ms
  • 内存:0kb
  • [2024-11-28 15:40:21]
  • 提交

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%