Pagini recente » Cod sursa (job #2029771) | Cod sursa (job #2443498) | Cod sursa (job #185819) | Cod sursa (job #2084047) | Cod sursa (job #1700263)
#include<bits/stdc++.h>
struct trie{
char s;
trie *c[2];
trie(){
s=0;
memset(c,NULL,sizeof(c));
}
};
int x,aux;
trie*root=new trie;
int da(int b){
return (x>>b)&1;
}
void insert(trie*nod,int bit){
if(bit==-1){
nod->s|=1;
return;
}
if(nod->c[da(bit)]==NULL){
nod->c[da(bit)]=new trie;
nod->s=(((nod->s>>1)+1)<<1)|(nod->s&1);
}
insert(nod->c[da(bit)],bit-1);
}
int erase(trie*nod,int bit){
if(bit==-1){
nod->s&=~1;
}else if(erase(nod->c[da(bit)],bit-1)){
nod->s=(((nod->s>>1)-1)<<1)|(nod->s&1);
nod->c[da(bit)]=NULL;
}
if(nod!=root&&nod->s==0){
delete nod;
return 1;
}
return 0;
}
int find(trie*nod,int bit){
if(bit==-1){
return nod->s&1;
}
return nod->c[da(bit)]==NULL?0:find(nod->c[da(bit)],bit-1);
}
int main(void){
FILE*f=fopen("hashuri.in","r");
freopen("hashuri.out","w",stdout);
int N,task;
fscanf(f,"%d",&N);
while(N){
fscanf(f,"%d%d",&task,&x);
if(task==1){
insert(root,30);
}else if(task==2){
if(find(root,30)){
erase(root,30);
}
}else{
fprintf(stdout,"%d\n",find(root,30));
}
N--;
}
fclose(f);
fclose(stdout);
///Multumim Doamne!
puts("Doamne ajuta!");
return 0;
}