Submission #1187035

#TimeUsernameProblemLanguageResultExecution timeMemory
1187035_rain_Tenis (COI19_tenis)C++20
0 / 100
60 ms3396 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N=(int)1e6;
int st[N*4+2];
int lazy[N*4+2];
int a[3][N+2]={};
int n;

#define lef(id) id*2
#define rig(id) id*2+1
void pushdown(int id,int l,int r){
	int&t=lazy[id];
	st[id]+=t;
	if (l!=r){
		lazy[lef(id)]+=t;
		lazy[rig(id)]+=t;
	}
	lazy[id]=0;
	return ;
}

void build(int id,int l,int r){

	if (l==r) st[id]=l;
	else{
		int m=(l+r)/2;
		build(lef(id),l,m);
		build(rig(id),m+1,r);
		st[id]=min(st[lef(id)],st[rig(id)]);
	}
}

void upd(int id,int l,int r,int u,int v,int val){
	pushdown(id,l,r);
	if (l>v||r<u) return;
	if (u<=l&&r<=v){
		lazy[id]+=val;
		pushdown(id,l,r);
		return;
	}
	int m=(l+r)/2;
	upd(lef(id),l,m,u,v,val);
	upd(rig(id),m+1,r,u,v,val);
	st[id]=min(st[lef(id)],st[rig(id)]);
	return;
}
int query(int id,int l,int r){
	pushdown(id,l,r);
	if (l==r) return l;
	int m=(l+r)/2;
	pushdown(lef(id),l,m);
	pushdown(rig(id),m+1,r);
	if (st[lef(id)]==0) return query(lef(id),l,m);
	return query(rig(id),m+1,r);
}

void modify(int x,int add){
	int mx=max({a[1][x],a[2][x],a[3][x]});
	upd(1,1,n,mx,n,add);
	return;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0) ; cout.tie(0);


	int q;
	cin>>n>>q;
	for(int i=1;i<=n;++i){
		int x; cin>>x;
		a[1][x]=i;
	}
	for(int i=1;i<=n;++i){
		int x; cin>>x;
		a[2][x]=i;
	}
	for(int i=1;i<=n;++i){
		int x; cin>>x;
		a[3][x]=i;
	}
	build(1,1,n);
	for(int i=1;i<=n;++i) modify(i,-1);
	while(q--){
		int t; cin>>t;
		if (t==1){
			int x; cin>>x;
			int mx=max({a[1][x],a[2][x],a[3][x]});
			int res=query(1,1,n);
			if (mx<=res){
				cout << "DA" << "\n";
			}
			else cout << "NE" << "\n";
		}
		else{
			int p,A,B; cin>>p>>A>>B;
			modify(A,1);
			modify(B,1);
			swap(a[p][A],a[p][B]);
			modify(A,-1);
			modify(B,-1);
		}
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...