답안 #223345

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
223345 2020-04-15T07:32:03 Z errorgorn Klasika (COCI20_klasika) C++14
33 / 110
5000 ms 255524 KB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ii pair<ll,ll>
#define iii pair<ll,ii>
#define endl '\n'

struct node{
	int s,e,m;
	set<int> val;
	
	node *l,*r;
	
	node (int _s,int _e){
		s=_s,e=_e,m=s+e>>1;
		
		val.insert(1<<30);
		
		if (s!=e){
			l=new node(s,m);
			r=new node(m+1,e);
		}
	}
	
	void update(int i,int j){
		val.insert(j);
		if (s==e) return;
		else if (i<=m) l->update(i,j);
		else r->update(i,j);
	}
	
	int query(int i,int j,int k){
		if (s==i && e==j){
			int curr=0;
			for (int x=29;~x;x--){
				if (k&(1<<x)){
					//can we find something with 0 bit
					if ((*val.lower_bound(curr))>=curr+(1<<x)) curr^=(1<<x);
				}
				else{
					//1-bit is better
					if ((*val.lower_bound(curr+(1<<x)))<curr+(2<<x)) curr^=(1<<x);
				}
			}
			return curr^k;
		}
		else if (j<=m) return l->query(i,j,k);
		else if (m<i) return r->query(i,j,k);
		else return max(l->query(i,m,k),r->query(m+1,j,k));
	}
}*root=new node(0,300005);

struct Q{
	char t;
	int a,b;
	
	Q (char _t,int _a,int _b){
		t=_t,a=_a,b=_b;
	}
};

int n;
vector<int> al[300005];
int val[300005];
int in[300005];
int out[300005];

int DFS_TIME=0;
void dfs(int i,int p){
	in[i]=++DFS_TIME;
	for (auto &it:al[i]){
		if (it==p) continue;
		
		dfs(it,i);
	}
	out[i]=DFS_TIME;
}

vector<Q> queries;

int main(){	
	ios::sync_with_stdio(0);
    cin.tie(0);
	
	cin>>n;
	
	string s;
	int a,b;
	for (int x=0;x<n;x++){
		cin>>s>>a>>b;
		queries.push_back(Q(s[0],a,b));
	}
	
	int index=2;
	for (auto &it:queries){
		if (it.t=='A'){
			al[it.a].push_back(index);
			al[index].push_back(it.a);
			
			val[index]=val[it.a]^it.b;
			index++;
		}
	}
	
	dfs(1,-1);
	
	//for (int x=1;x<index;x++) cout<<val[x]<<" "<<in[x]<<" "<<out[x]<<endl;
	root->update(in[1],val[1]); //oof

	index=2;
	for (auto &it:queries){
		if (it.t=='A'){
			//cout<<in[index]<<" "<<val[index]<<endl;
			root->update(in[index],val[index]);
			index++;
		}
		else{
			//cout<<in[it.b]<<" "<<out[it.b]<<" "<<val[it.a]<<endl;
			cout<<root->query(in[it.b],out[it.b],val[it.a])<<endl;
		}
	}
}

Compilation message

klasika.cpp: In constructor 'node::node(int, int)':
klasika.cpp:15:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   s=_s,e=_e,m=s+e>>1;
               ~^~
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 92024 KB Output is correct
2 Correct 83 ms 92024 KB Output is correct
3 Correct 91 ms 92024 KB Output is correct
4 Correct 86 ms 92024 KB Output is correct
5 Correct 84 ms 92024 KB Output is correct
6 Correct 86 ms 92024 KB Output is correct
7 Correct 95 ms 92024 KB Output is correct
8 Correct 87 ms 92024 KB Output is correct
9 Correct 85 ms 92028 KB Output is correct
10 Correct 97 ms 92024 KB Output is correct
11 Correct 85 ms 92024 KB Output is correct
12 Correct 85 ms 92024 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 92024 KB Output is correct
2 Correct 83 ms 92024 KB Output is correct
3 Correct 91 ms 92024 KB Output is correct
4 Correct 86 ms 92024 KB Output is correct
5 Correct 84 ms 92024 KB Output is correct
6 Correct 86 ms 92024 KB Output is correct
7 Correct 95 ms 92024 KB Output is correct
8 Correct 87 ms 92024 KB Output is correct
9 Correct 85 ms 92028 KB Output is correct
10 Correct 97 ms 92024 KB Output is correct
11 Correct 85 ms 92024 KB Output is correct
12 Correct 85 ms 92024 KB Output is correct
13 Correct 94 ms 92408 KB Output is correct
14 Correct 95 ms 92792 KB Output is correct
15 Correct 103 ms 93272 KB Output is correct
16 Correct 97 ms 93560 KB Output is correct
17 Correct 88 ms 92408 KB Output is correct
18 Correct 88 ms 92792 KB Output is correct
19 Correct 91 ms 93176 KB Output is correct
20 Correct 96 ms 93560 KB Output is correct
21 Correct 90 ms 92408 KB Output is correct
22 Correct 89 ms 92792 KB Output is correct
23 Correct 92 ms 93084 KB Output is correct
24 Correct 100 ms 93560 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 4712 ms 135824 KB Output is correct
2 Correct 4752 ms 175264 KB Output is correct
3 Correct 4361 ms 214204 KB Output is correct
4 Correct 3021 ms 255524 KB Output is correct
5 Execution timed out 5099 ms 134124 KB Time limit exceeded
6 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 88 ms 92024 KB Output is correct
2 Correct 83 ms 92024 KB Output is correct
3 Correct 91 ms 92024 KB Output is correct
4 Correct 86 ms 92024 KB Output is correct
5 Correct 84 ms 92024 KB Output is correct
6 Correct 86 ms 92024 KB Output is correct
7 Correct 95 ms 92024 KB Output is correct
8 Correct 87 ms 92024 KB Output is correct
9 Correct 85 ms 92028 KB Output is correct
10 Correct 97 ms 92024 KB Output is correct
11 Correct 85 ms 92024 KB Output is correct
12 Correct 85 ms 92024 KB Output is correct
13 Correct 94 ms 92408 KB Output is correct
14 Correct 95 ms 92792 KB Output is correct
15 Correct 103 ms 93272 KB Output is correct
16 Correct 97 ms 93560 KB Output is correct
17 Correct 88 ms 92408 KB Output is correct
18 Correct 88 ms 92792 KB Output is correct
19 Correct 91 ms 93176 KB Output is correct
20 Correct 96 ms 93560 KB Output is correct
21 Correct 90 ms 92408 KB Output is correct
22 Correct 89 ms 92792 KB Output is correct
23 Correct 92 ms 93084 KB Output is correct
24 Correct 100 ms 93560 KB Output is correct
25 Correct 4712 ms 135824 KB Output is correct
26 Correct 4752 ms 175264 KB Output is correct
27 Correct 4361 ms 214204 KB Output is correct
28 Correct 3021 ms 255524 KB Output is correct
29 Execution timed out 5099 ms 134124 KB Time limit exceeded
30 Halted 0 ms 0 KB -