답안 #257129

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
257129 2020-08-03T15:56:21 Z blacktulip Klasika (COCI20_klasika) C++17
33 / 110
1321 ms 524292 KB
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

#include <bits/stdc++.h>

using namespace std;

typedef long long lo;
typedef pair< lo,lo > PII;

#define fi first
#define se second
#define mp make_pair
#define int long long
#define endl "\n"
#define pb push_back
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define FOR for(int i=1;i<=n;i++)
#define mid ((start+end)/2)
#define ort ((bas+son)/2)

const lo inf = 1000000000000000000;
const lo KOK = 100000;
const lo LOG = 30;
const lo li = 200005;
const lo mod = 1000000007;

int n,m,b[li],a[li],k,flag,t,say=1,nodee=1,visit[li*40][5],xorr[li],l[li],r[li],x[li],y[li],q;
int cev;
char s[li][10];
set<int> st[li*40];
vector<int> v,vec[li],vect;

inline void build_trie(int xxx){
	int node=1;
	//~ cout<<xxx<<"*(*(*(\n";
	for(int i=0;i<(int)v.size();i++){
		st[node].insert(xxx);
		if(visit[node][v[i]])node=visit[node][v[i]];
		else{
			visit[node][v[i]]=++nodee;
			node=nodee;
		}
	}
	st[node].insert(xxx);
}

inline void ask_trie(int xx){
	int node=1;
	//~ cout<<l[xx]<<" : :  : "<<r[xx]<<endl;
	for(int i=0;i<(int)v.size();i++){
		auto it=st[visit[node][!v[i]]].lower_bound(l[xx]);
		//~ if(xx==3 && node==1)cout<<node<<"****"<<endl;
		//~ if(visit[node][!v[i]]){
		int yess=0;
			//~ cout<<*it<<endl;
			if(it!=st[visit[node][!v[i]]].end()){
				//~ if(xx==3)cout<<*it<<endl;
				
				if(visit[node][!v[i]] && *it<=r[xx]){node=visit[node][!v[i]];vect.pb(1);yess=1;}
			}
		//~ }
		if(yess==0){node=visit[node][v[i]];vect.pb(0);}
	}
}

inline void dfs(int node,int ata){
	l[node]=++q;
	r[node]=q;
	for(int i=0;i<(int)vec[node].size();i++){
		int go=vec[node][i];
		if(go==ata)continue;
		dfs(go,node);
		r[node]=max(r[node],r[go]);
	}
}

main(void){
	//~ freopen("at.txt","r",stdin);
	//~ freopen("att.txt","w",stdout);
	scanf("%lld",&t);
	for(int i=1;i<=36;i++)v.pb(0);
	build_trie(1);
	for(int i=1;i<=t;i++){
		//~ int x,y;
		scanf("%s %lld %lld",s[i],&x[i],&y[i]);
		if(s[i][0]=='A'){
			//~ xorr[++say]=(xorr[x[i]]^y[i]);
			vec[x[i]].pb(++say);
			vec[say].pb(x[i]);
			//~ v.clear();
			//~ while(at){
				//~ v.pb(at%2);
				//~ at/=2;
			//~ }
			//~ while((int)v.size()<35)v.pb(0);
			//~ reverse(v.begin(),v.end());
			//~ build_trie();
			//~ continue;
		}
		//~ int at=xorr[x];
		//~ v.clear();
		//~ while(at){
			//~ v.pb(at%2);
			//~ at/=2;
		//~ }
		//~ while((int)v.size()<35)v.pb(0);
		//~ reverse(v.begin(),v.end());
		//~ vect.clear();
		//~ ask_trie();
		//~ reverse(vect.begin(),vect.end());
		//~ int ans=0;
		//~ for(int i=0;i<(int)vect.size();i++){
			//~ if(vect[i]==1)ans=(ans^(1ll<<i));
		//~ }
		//~ printf("%lld\n",ans);
	}
	dfs(1,0);
	//~ cout<<l[5]<<" : : "<<r[5]<<" : : "<<xorr[]endl;
	say=1;
	for(int i=1;i<=t;i++){
		if(s[i][0]=='A'){
			xorr[++say]=(xorr[x[i]]^y[i]);
			//~ vec[x[i]].pb(say);
			int at=xorr[say];
			//~ vec[say].pb(x[i]);
			v.clear();
			while(at){
				v.pb(at%2);
				at/=2;
			}
			while((int)v.size()<35)v.pb(0);
			reverse(v.begin(),v.end());
			build_trie(l[say]);
			continue;
		}
		int at=xorr[x[i]];
		v.clear();
		while(at){
			v.pb(at%2);
			at/=2;
		}
		while((int)v.size()<35)v.pb(0);
		reverse(v.begin(),v.end());
		vect.clear();
		ask_trie(y[i]);
		reverse(vect.begin(),vect.end());
		int ans=0;
		for(int j=0;j<(int)vect.size();j++){
			if(vect[j]==1)ans=(ans^(1ll<<j));
		}
		printf("%lld\n",ans);
	}
	//~ cout<<xorr[3]<<endl;
	return 0;
}

Compilation message

klasika.cpp:78:10: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main(void){
          ^
klasika.cpp: In function 'int main()':
klasika.cpp:81:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%lld",&t);
  ~~~~~^~~~~~~~~~~
klasika.cpp:86:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%s %lld %lld",s[i],&x[i],&y[i]);
   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 274 ms 381048 KB Output is correct
2 Correct 233 ms 381180 KB Output is correct
3 Correct 235 ms 381176 KB Output is correct
4 Correct 225 ms 381176 KB Output is correct
5 Correct 225 ms 380920 KB Output is correct
6 Correct 231 ms 381180 KB Output is correct
7 Correct 229 ms 381176 KB Output is correct
8 Correct 234 ms 381176 KB Output is correct
9 Correct 224 ms 380920 KB Output is correct
10 Correct 228 ms 381048 KB Output is correct
11 Correct 226 ms 381176 KB Output is correct
12 Correct 224 ms 381180 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 274 ms 381048 KB Output is correct
2 Correct 233 ms 381180 KB Output is correct
3 Correct 235 ms 381176 KB Output is correct
4 Correct 225 ms 381176 KB Output is correct
5 Correct 225 ms 380920 KB Output is correct
6 Correct 231 ms 381180 KB Output is correct
7 Correct 229 ms 381176 KB Output is correct
8 Correct 234 ms 381176 KB Output is correct
9 Correct 224 ms 380920 KB Output is correct
10 Correct 228 ms 381048 KB Output is correct
11 Correct 226 ms 381176 KB Output is correct
12 Correct 224 ms 381180 KB Output is correct
13 Correct 243 ms 381944 KB Output is correct
14 Correct 247 ms 383096 KB Output is correct
15 Correct 242 ms 384044 KB Output is correct
16 Correct 246 ms 385044 KB Output is correct
17 Correct 238 ms 381968 KB Output is correct
18 Correct 240 ms 382984 KB Output is correct
19 Correct 242 ms 383984 KB Output is correct
20 Correct 250 ms 384916 KB Output is correct
21 Correct 247 ms 381960 KB Output is correct
22 Correct 251 ms 382968 KB Output is correct
23 Correct 260 ms 383992 KB Output is correct
24 Correct 284 ms 384888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1321 ms 485868 KB Output is correct
2 Runtime error 1219 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 274 ms 381048 KB Output is correct
2 Correct 233 ms 381180 KB Output is correct
3 Correct 235 ms 381176 KB Output is correct
4 Correct 225 ms 381176 KB Output is correct
5 Correct 225 ms 380920 KB Output is correct
6 Correct 231 ms 381180 KB Output is correct
7 Correct 229 ms 381176 KB Output is correct
8 Correct 234 ms 381176 KB Output is correct
9 Correct 224 ms 380920 KB Output is correct
10 Correct 228 ms 381048 KB Output is correct
11 Correct 226 ms 381176 KB Output is correct
12 Correct 224 ms 381180 KB Output is correct
13 Correct 243 ms 381944 KB Output is correct
14 Correct 247 ms 383096 KB Output is correct
15 Correct 242 ms 384044 KB Output is correct
16 Correct 246 ms 385044 KB Output is correct
17 Correct 238 ms 381968 KB Output is correct
18 Correct 240 ms 382984 KB Output is correct
19 Correct 242 ms 383984 KB Output is correct
20 Correct 250 ms 384916 KB Output is correct
21 Correct 247 ms 381960 KB Output is correct
22 Correct 251 ms 382968 KB Output is correct
23 Correct 260 ms 383992 KB Output is correct
24 Correct 284 ms 384888 KB Output is correct
25 Correct 1321 ms 485868 KB Output is correct
26 Runtime error 1219 ms 524292 KB Execution killed with signal 9 (could be triggered by violating memory limits)
27 Halted 0 ms 0 KB -