Pagini recente » Cod sursa (job #990561) | Cod sursa (job #2361829) | Cod sursa (job #712984) | Istoria paginii runda/arhiva-test/clasament | Cod sursa (job #1700259)
#include<bits/stdc++.h>
struct trie{
int count,fii;
trie *c[2];
trie(){
count=fii=0;
memset(c,NULL,sizeof(c));
}
};
int x;
trie*root=new trie;
int da(int b){
return (x>>b)&1;
}
void insert(trie*nod,int bit){
if(bit==-1){
nod->count=1;
return;
}
if(nod->c[da(bit)]==NULL){
nod->c[da(bit)]=new trie;
nod->fii++;
}
insert(nod->c[da(bit)],bit-1);
}
int erase(trie*nod,int bit){
if(bit==-1){
nod->count=0;
}else if(erase(nod->c[da(bit)],bit-1)){
nod->fii--;
nod->c[da(bit)]=NULL;
}
if(nod!=root&&nod->count==0&&nod->fii==0){
delete nod;
return 1;
}
return 0;
}
int find(trie*nod,int bit){
if(bit==-1){
return nod->count;
}
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;
}