Submission #1173135

#TimeUsernameProblemLanguageResultExecution timeMemory
1173135rayan_bdKlasika (COCI20_klasika)C++17
33 / 110
5094 ms79796 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("Ofast") #pragma GCC optimize("inline") #pragma GCC optimize("-fgcse") #pragma GCC optimize("-fgcse-lm") #pragma GCC optimize("-fipa-sra") #pragma GCC optimize("-ftree-pre") #pragma GCC optimize("-ftree-vrp") #pragma GCC optimize("-fpeephole2") #pragma GCC optimize("-ffast-math") #pragma GCC optimize("-fsched-spec") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-falign-jumps") #pragma GCC optimize("-falign-loops") #pragma GCC optimize("-falign-labels") #pragma GCC optimize("-fdevirtualize") #pragma GCC optimize("-fcaller-saves") #pragma GCC optimize("-fcrossjumping") #pragma GCC optimize("-fthread-jumps") #pragma GCC optimize("-funroll-loops") #pragma GCC optimize("-fwhole-program") #pragma GCC optimize("-freorder-blocks") #pragma GCC optimize("-fschedule-insns") #pragma GCC optimize("inline-functions") #pragma GCC optimize("-ftree-tail-merge") #pragma GCC optimize("-fschedule-insns2") #pragma GCC optimize("-fstrict-aliasing") #pragma GCC optimize("-fstrict-overflow") #pragma GCC optimize("-falign-functions") #pragma GCC optimize("-fcse-skip-blocks") #pragma GCC optimize("-fcse-follow-jumps") #pragma GCC optimize("-fsched-interblock") #pragma GCC optimize("-fpartial-inlining") #pragma GCC optimize("no-stack-protector") #pragma GCC optimize("-freorder-functions") #pragma GCC optimize("-findirect-inlining") #pragma GCC optimize("-fhoist-adjacent-loads") #pragma GCC optimize("-frerun-cse-after-loop") #pragma GCC optimize("inline-small-functions") #pragma GCC optimize("-finline-small-functions") #pragma GCC optimize("-ftree-switch-conversion") #pragma GCC optimize("-foptimize-sibling-calls") #pragma GCC optimize("-fexpensive-optimizations") #pragma GCC optimize("-funsafe-loop-optimizations") #pragma GCC optimize("inline-functions-called-once") #pragma GCC optimize("-fdelete-null-pointer-checks") #define getar(ar,n) for(int i=0;i<n;++i) cin>>ar[i] #define show(n) cout<<n<<'\n' #define all(v) v.begin(), v.end() #define br cout<<"\n" #define pb push_back #define nl '\n' #define fi first #define se second const int mxN = 3e5 + 50; int N=1,idx=0,parent[mxN],depth[mxN],heavy[mxN],head[mxN],sz[mxN],lt[mxN],tin[mxN],tout[mxN],seg[mxN*4],val[mxN],till[mxN]; vector<pair<int,int>> adj[mxN]; vector<pair<int,int>> nadj[mxN]; struct Node { Node* children[2]; Node(){ for(int i=0;i<2;++i){ children[i]=NULL; } } }; struct Trie{ Node* root = new Node(); void add(int x){ Node* curr=root; for(int i=32;i>=0;--i){ int curr_bit=(x&(1ll<<i))>0; if(curr->children[curr_bit]==NULL){ curr->children[curr_bit]=new Node(); } curr=curr->children[curr_bit]; } } int qry(int x){ Node* curr=root; int ans=0; for(int i=32;i>=0;--i){ int curr_bit=((x&(1ll<<i))>0); if(curr->children[!curr_bit]!=NULL){ curr=curr->children[!curr_bit]; ans|=(1ll<<i); }else{ curr=curr->children[curr_bit]; } if(curr==NULL) break; } return ans; } } t[mxN*4]; struct Seg { void update_1(int node,int start,int end,int idx,int val){ if(start==end){ seg[node]=val; return; } int mid=start+(end-start)/2; if(idx<=mid) update_1(node*2+1,start,mid,idx,val); else update_1(node*2+2,mid+1,end,idx,val); seg[node]=seg[node*2+1]^seg[node*2+2]; } void update_2(int node,int start,int end,int idx,int val){ t[node].add(val); if(start==end) return; int mid=start+(end-start)/2; if(idx<=mid) update_2(node*2+1,start,mid,idx,val); else update_2(node*2+2,mid+1,end,idx,val); } int qry_answer(int node,int start,int end,int l,int r,int val){ if(start==end) return t[node].qry(val); int mid=start+(end-start)/2; if(r<=mid) return qry_answer(node*2+1,start,mid,l,r,val); else if(l>mid) return qry_answer(node*2+2,mid+1,end,l,r,val); else return max(qry_answer(node*2+1,start,mid,l,mid,val),qry_answer(node*2+2,mid+1,end,mid+1,r,val)); } int xor_qry(int node,int start,int end,int l,int r){ if(start>r||end<l) return 0; if(start>=l&&end<=r) return seg[node]; int mid=start+(end-start)/2; return xor_qry(node*2+1,start,mid,l,r)^xor_qry(node*2+2,mid+1,end,l,r); } } seg_tree; struct HLD { void dfs(int u=1,int par=0){ sz[u]=1; parent[u]=par; depth[u]=depth[par]+1; for(auto it:adj[u]){ if(it.fi^par){ dfs(it.fi,u); val[it.fi]=it.se; sz[u]+=sz[it.fi]; if(sz[heavy[u]]<sz[it.fi]) heavy[u]=it.fi; } } } void dfsHLD(int u=1,int chain=1){ head[u]=chain; lt[idx]=val[u]; tin[u]=idx++; seg_tree.update_1(0,0,N-1,tin[u],val[u]); if(heavy[u]!=0) dfsHLD(heavy[u],chain); for(auto it:adj[u]){ if(it.fi!=parent[u]&&it.fi!=heavy[u]) dfsHLD(it.fi,it.fi); } tout[u]=idx-1; } int path_xor(int u,int v){ int ans=0; while(head[u]!=head[v]){ if(depth[head[u]]<depth[head[v]]) swap(u,v); ans=ans^seg_tree.xor_qry(0,0,N-1,tin[head[u]],tin[u]); u=parent[head[u]]; } if(depth[u]<depth[v]) swap(u,v); return (ans^seg_tree.xor_qry(0,0,N-1,tin[v],tin[u]))^val[v]; } } hld; int cdfs(int u,int path,int current){ int ans=current^path; for(auto it:nadj[u]){ ans=max(ans,cdfs(it.fi,path,current^it.se)); } return ans; } void lets_go() { int q,u,v;cin>>q; string type; vector<vector<int>> Q; // 1-> add ,0-> query for(int i=0;i<q;++i){ cin>>type>>u>>v; if(type=="Add"){ Q.pb({1,u,++N,v}); adj[u].pb({N,v}); }else{ Q.pb({0,u,v}); } } hld.dfs(); hld.dfsHLD(); for(auto it:Q){ if(it[0]==1){ till[it[2]]=till[it[1]]^it[3]; nadj[it[1]].pb({it[2],it[3]}); //seg_tree.update_2(0,0,N-1,tin[it[2]],till[it[2]]); }else{ u=it[1],v=it[2]; //show(seg_tree.qry_answer(0,0,N-1,tin[v],tout[v],hld.path_xor(u,v)^till[v])); show(cdfs(v,hld.path_xor(u,v),0)); } } } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); lets_go(); return 0; }

Compilation message (stderr)

klasika.cpp:23:39: warning: bad option '-fwhole-program' to pragma 'optimize' [-Wpragmas]
   23 | #pragma GCC optimize("-fwhole-program")
      |                                       ^
klasika.cpp:30:41: warning: bad option '-fstrict-overflow' to pragma 'optimize' [-Wpragmas]
   30 | #pragma GCC optimize("-fstrict-overflow")
      |                                         ^
klasika.cpp:32:41: warning: bad option '-fcse-skip-blocks' to pragma 'optimize' [-Wpragmas]
   32 | #pragma GCC optimize("-fcse-skip-blocks")
      |                                         ^
klasika.cpp:46:51: warning: bad option '-funsafe-loop-optimizations' to pragma 'optimize' [-Wpragmas]
   46 | #pragma GCC optimize("-funsafe-loop-optimizations")
      |                                                   ^
klasika.cpp:67:14: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
   67 |         Node(){
      |              ^
klasika.cpp:67:14: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:67:14: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:67:14: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:76:23: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
   76 |         void add(int x){
      |                       ^
klasika.cpp:76:23: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:76:23: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:76:23: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:86:22: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
   86 |         int qry(int x){
      |                      ^
klasika.cpp:86:22: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:86:22: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:86:22: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:104:59: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  104 |   void update_1(int node,int start,int end,int idx,int val){
      |                                                           ^
klasika.cpp:104:59: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:104:59: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:104:59: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:114:59: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  114 |   void update_2(int node,int start,int end,int idx,int val){
      |                                                           ^
klasika.cpp:114:59: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:114:59: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:114:59: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:121:64: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  121 |   int qry_answer(int node,int start,int end,int l,int r,int val){
      |                                                                ^
klasika.cpp:121:64: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:121:64: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:121:64: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:128:53: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  128 |   int xor_qry(int node,int start,int end,int l,int r){
      |                                                     ^
klasika.cpp:128:53: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:128:53: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:128:53: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:138:35: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  138 |         void dfs(int u=1,int par=0){
      |                                   ^
klasika.cpp:138:35: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:138:35: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:138:35: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:152:40: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  152 |         void dfsHLD(int u=1,int chain=1){
      |                                        ^
klasika.cpp:152:40: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:152:40: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:152:40: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:164:33: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  164 |         int path_xor(int u,int v){
      |                                 ^
klasika.cpp:164:33: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:164:33: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:164:33: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:177:36: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  177 | int cdfs(int u,int path,int current){
      |                                    ^
klasika.cpp:177:36: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:177:36: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:177:36: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:185:14: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  185 | void lets_go() {
      |              ^
klasika.cpp:185:14: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:185:14: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:185:14: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
klasika.cpp:213:13: warning: bad option '-fwhole-program' to attribute 'optimize' [-Wattributes]
  213 | signed main() {
      |             ^
klasika.cpp:213:13: warning: bad option '-fstrict-overflow' to attribute 'optimize' [-Wattributes]
klasika.cpp:213:13: warning: bad option '-fcse-skip-blocks' to attribute 'optimize' [-Wattributes]
klasika.cpp:213:13: warning: bad option '-funsafe-loop-optimizations' to attribute 'optimize' [-Wattributes]
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...