Submission #1180727

#TimeUsernameProblemLanguageResultExecution timeMemory
1180727sleepntsheepKlasika (COCI20_klasika)C11
Compilation error
0 ms0 KiB
#include<stdio.h>
#define N 200055

int nq,n,hd[N],fa[N],nxt[N+N],vv_[N+N],ii,jj=1,dfn[N],out[N],dfc,ii_,dp[N],ww[N];
void Lnk(int u,int v){int i=++ii;nxt[i]=hd[u];vv_[i]=v;hd[u]=i;}
void dfs(int u,int p){
    dp[u]=dp[p]^ww[u];
    dfn[u]=dfc++;
    for(int j=hd[u];j;j=nxt[j])if(vv_[j]-p)dfs(vv_[j],u);
    out[u]=dfc-1;
}

struct QQ{char op[5];int a,b;}q[N];

struct{int lc,rc;}trie[N*400];
int tt[N*4],ll[99],rr[99],vv[99],oo;
void trieins(int&v,int val,int i){
    if(!v)v=++ii_;
    if(i==-1)return;
    trieins((val>>i)%2?trie[v].rc:trie[v].lc,val,i-1);
}

int trieqry(int val,int i){
    if(i==-1)return 0;
    int want=((val>>i)&1)^1,cnt=0;
    for(int i=0;i<oo;++i)cnt+=want?!!trie[vv[i]].rc:!!trie[vv[i]].lc;
    if(!cnt){
	for(int i=0;i<oo;++i)vv[i]=want?trie[vv[i]].lc:trie[vv[i]].rc;
	return trieqry(val,i-1);
    }else{
	for(int i=0;i<oo;++i)vv[i]=want?trie[vv[i]].rc:trie[vv[i]].lc;
	return (1<<i)+trieqry(val,i-1);
    }
}

void stins(int v,int l,int r,int p,int k){
    trieins(tt[v],k,29);
    if(l==r)return;
    if(p<=(l+r)/2)stins(v*2+1,l,(l+r)/2,p,k);
    else stins(v*2+2,(l+r)/2+1,r,p,k);
}
void gen(int v,int l,int r,int x,int y){
    if(r<x||y<l)return;
    if(x<=l&&r<=y){ 
	//printf(" Gen(%d %d %d)\n",v,l,r);
	vv[oo++]=tt[v];return; }
    gen(v*2+1,l,(l+r)/2,x,y);gen(v*2+2,(l+r)/2+1,r,x,y);
}

int main(){
    scanf("%d",&nq);
    for(int i=0;i<nq;++i){
	scanf("%s%d%d",&q[i].op,&q[i].a,&q[i].b);
	if(q[i].op[0]=='A'){
	    fa[++jj]=q[i].a;
	    Lnk(fa[jj],jj);ww[jj]=q[i].b;
	    q[i].a=jj;
	}
    }
    n=jj;
    dfs(1,1);
    for(int i=0;i<nq;++i){
	if(q[i].op[0]=='A'){
	    //printf(" Turn on %d at %d\n",dp[q[i].a],dfn[q[i].a]);
	    stins(0,0,n-1,dfn[q[i].a],dp[q[i].a]);
	}else{
	    oo=0;gen(0,0,n-1,dfn[q[i].b],out[q[i].b]);
	    //printf(" Qry %d on %d %d\n",dp[q[i].a],dfn[q[i].b],out[q[i].b]);
	    printf("%d\n",trieqry(dp[q[i].a],29));
	}

    }

    return 0;
}

Compilation message (stderr)

klasika.c:17:17: error: expected ';', ',' or ')' before '&' token
   17 | void trieins(int&v,int val,int i){
      |                 ^
klasika.c: In function 'stins':
klasika.c:37:5: warning: implicit declaration of function 'trieins' [-Wimplicit-function-declaration]
   37 |     trieins(tt[v],k,29);
      |     ^~~~~~~
klasika.c: In function 'main':
klasika.c:53:17: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[5]' [-Wformat=]
   53 |         scanf("%s%d%d",&q[i].op,&q[i].a,&q[i].b);
      |                ~^      ~~~~~~~~
      |                 |      |
      |                 char * char (*)[5]
klasika.c:51:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   51 |     scanf("%d",&nq);
      |     ^~~~~~~~~~~~~~~
klasika.c:53:9: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |         scanf("%s%d%d",&q[i].op,&q[i].a,&q[i].b);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~