제출 #382088

#제출 시각아이디문제언어결과실행 시간메모리
382088kshitij_sodaniTenis (COI19_tenis)C++14
30 / 100
659 ms5240 KiB
//#pragma GCC optimize("Ofast,unroll-loops")
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define mp make_pair
#define pb push_back
#define a first 
#define b second
#define endl '\n'
int n,q;
int it[100001][3];
int vis[100001][3];
int tree[100001*4];
int lazy[100001*4];
int ind[100001][3];
void push(int no,int l,int r){
	tree[no]+=lazy[no];
	if(l<r){
		lazy[no*2+1]+=lazy[no];
		lazy[no*2+2]+=lazy[no];	
	}
	lazy[no]=0;
}
void update(int no,int l,int r,int aa,int bb,int val){
	push(no,l,r);
	if(r<aa or l>bb){
		return;
	}
	if(aa<=l and r<=bb){
		lazy[no]+=val;
		push(no,l,r);
	}
	else{
		int mid=(l+r)/2;
		update(no*2+1,l,mid,aa,bb,val);
		update(no*2+2,mid+1,r,aa,bb,val);
		tree[no]=max(tree[no*2+1],tree[no*2+2]);
	}
}
int query(int no,int l,int r,int aa,int bb){
	push(no,l,r);
	if(r<aa or l>bb){
		return 0;
	}
	if(aa<=l and r<=bb){
		return tree[no];
	}
	else{
		int mid=(l+r)/2;
		int x=max(query(no*2+1,l,mid,aa,bb),query(no*2+2,mid+1,r,aa,bb));
		tree[no]=max(tree[no*2+1],tree[no*2+2]);
		return x;
	}

}
void pro(int i,int val=1){
	int x=min(ind[i][0],ind[i][1]);
	x=min(x,ind[i][2]);
	if(x>0){
		update(0,0,n-1,0,x-1,val);
	}
	x=max(max(ind[i][0],ind[i][1]),ind[i][2]);
	update(0,0,n-1,x,n-1,val);
}
int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin>>n>>q;
	for(int i=0;i<n;i++){
		cin>>it[i][0];
		ind[it[i][0]][0]=i;
	}
	for(int i=0;i<n;i++){
		cin>>it[i][1];
		ind[it[i][1]][1]=i;
	}
	for(int i=0;i<n;i++){
		cin>>it[i][2];
		ind[it[i][2]][2]=i;
	}
	for(int i=0;i<n;i++){
		pro(i+1,1);
	}

	
	while(q--){
		int tt;
		cin>>tt;
		if(tt==1){
			int x;
			cin>>x;
			int low=-1;
		/*	for(int i=0;i<n;i++){
				cout<<query(0,0,n-1,0,i)<<":";
			}
			cout<<endl;*/
			for(int j=16;j>=0;j--){
				if((1<<j)+low<n){
					if(query(0,0,n-1,0,(1<<j)+low)<n){
						low+=(1<<j);
					}
				}
			}
			low+=1;
			if(ind[x][0]>low){
				cout<<"NE"<<endl;
			}
			else{
				cout<<"DA"<<endl;
			}
			/*int st=0;
			for(int i=1;i<=n;i++){
				for(int j=0;j<3;j++){
					vis[i][j]=0;
				}
			}
			set<int> ss;
			for(int i=0;i<n;i++){
				int kk=1;
				for(int j=0;j<3;j++){
					ss.erase(it[i][j]);
					vis[it[i][j]][j]=1;
					if(vis[it[i][j]][0]!=vis[it[i][j]][1] or vis[it[i][j]][0]!=vis[it[i][j]][2]){
						ss.insert(it[i][j]);
						continue;
					}
				}
				if(vis[x][0]+vis[x][1]+vis[x][2]>0){
					kk=0;
					break;
				}
				
				if(ss.size()==0){
					
					st=1;
					break;
				}
			}*/
			/*if(st==0){
				cout<<"DA"<<endl;
			}
			else{
				cout<<"NE"<<endl;
			}*/

		}
		else{
			int x,y,z;
			cin>>x>>y>>z;
			x--;
			pro(y,-1);
			pro(z,-1);
			int ind2=ind[y][x];
			int ind3=ind[z][x];
			swap(ind[y][x],ind[z][x]);
			pro(y,1);
			pro(z,1);
			/*for(int i=0;i<n;i++){
				if(it[i][x]==y){
					ind=i;
				}
				if(it[i][x]==z){
					ind2=i;
				}
			}*/

			//cout<<ind<<":"<<ind2<<endl;
			
			//swap(it[ind][x],it[ind2][x]);
		}
	}






 
	return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

tenis.cpp: In function 'int main()':
tenis.cpp:153:8: warning: unused variable 'ind2' [-Wunused-variable]
  153 |    int ind2=ind[y][x];
      |        ^~~~
tenis.cpp:154:8: warning: unused variable 'ind3' [-Wunused-variable]
  154 |    int ind3=ind[z][x];
      |        ^~~~
#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...