Pagini recente » Cod sursa (job #286800) | Cod sursa (job #2697883) | Cod sursa (job #1548993) | Cod sursa (job #2094707) | Cod sursa (job #1956969)
#include<stdio.h>
#define MOD 666013
#define MAXN 1000000
inline int hash(int x);
inline void Add(int x);
inline void Remove(int x);
inline int Query(int x);
FILE*fin,*fout;
int lista[MOD],next[MAXN],val[MAXN];
int FreePtr[MAXN],ult;
int main()
{
fin=fopen("hashuri.in","r");
fout=fopen("hashuri.out","w");
int N;
fscanf(fin,"%d",&N);
for(int i=1;i<=N;i++)
{
FreePtr[i]=i;
}
ult=N;
for(int i=0;i<N;i++)
{
int type,x;
fscanf(fin,"%d%d",&type,&x);
if(type==1)
{
Add(x);
}
if(type==2)
{
Remove(x);
}
if(type==3)
{
fprintf(fout,"%d\n",Query(x));
}
}
fclose(fin);
fclose(fout);
return 0;
}
inline int hash(int x)
{
return x%MOD;
}
inline void Add(int x)
{
if(!Query(x))
{
int p=FreePtr[ult--];
//printf("%d\n", p);
next[p]=lista[hash(x)];
val[p]=x;
lista[hash(x)]=p;
}
}
inline void Remove(int x)
{
int p=lista[hash(x)];
if(p!=0 && val[p]==x)
{
lista[hash(x)]=next[p];
FreePtr[++ult]=p;
return;
}
while(p!=0 && val[next[p]]!=x)
{
p=next[p];
}
if(p!=0 && val[next[p]]==x)
{
FreePtr[++ult]=next[p];
next[p]=next[next[p]];
}
}
inline int Query(int x)
{
int p=lista[hash(x)];
if(val[p]==x)
{
return 1;
}
while(p!=0)
{
if(val[next[p]]==x)
{
return 1;
}
p=next[p];
}
return 0;
}