Pagini recente » Cod sursa (job #950245) | Cod sursa (job #1526884) | Cod sursa (job #403151) | Cod sursa (job #1237727) | Cod sursa (job #257485)
Cod sursa(job #257485)
#include <stdio.h>
#define MOD (262144*2)-1
#define Nmax 700000
#define IN "hashuri.in"
#define OUT "hashuri.out"
FILE *fin=fopen(IN,"r");
FILE *fout=fopen(OUT,"w");
int next_el=MOD;
struct nod
{
int nr;
char ok;
int next;
}h[MOD+Nmax];
inline void add(int nr);
inline void del(int nr);
inline int ok(int nr);
int main()
{
int t,op,nr;
fscanf(fin,"%d",&t);
while(t>2)
{
fscanf(fin,"%d%d",&op,&nr);
if(op==1)
add(nr);
else
if(op==2)
del(nr);
else
fprintf(fout,"%d\n", ok(nr));
fscanf(fin,"%d%d",&op,&nr);
if(op==1)
add(nr);
else
if(op==2)
del(nr);
else
fprintf(fout,"%d\n", ok(nr));
fscanf(fin,"%d%d",&op,&nr);
if(op==1)
add(nr);
else
if(op==2)
del(nr);
else
fprintf(fout,"%d\n", ok(nr));
t-=3;
}
while (t--)
{
fscanf(fin,"%d%d",&op,&nr);
if(op==1)
add(nr);
else
if(op==2)
del(nr);
else
fprintf(fout,"%d\n", ok(nr));
}
fclose(fin);
fclose(fout);
return 0;
}
inline void add(int nr)
{
char ok=0;
int it;
for(it=nr&MOD;;it=h[it].next)
if (h[it].nr==nr)
{
ok=1;
h[it].ok=1;
break;
}
else
if(h[it].next==0)
break;
if(ok==0)
{
h[it].next=next_el++;
it=h[it].next;
h[it].nr=nr;
h[it].ok = 1;
}
}
inline void del(int nr)
{
for(int it=nr&MOD;it;it=h[it].next)
if(h[it].nr==nr)
h[it].ok=0;
}
inline int ok(int nr)
{
for(int it=nr&MOD;it;it=h[it].next)
if(h[it].nr==nr && h[it].ok==1)
return 1;
return 0;
}