Cod sursa(job #1846221)

Utilizator ASD135Radu M ASD135 Data 12 ianuarie 2017 13:18:53
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
 
 
const int KEY=1<<20;
 
const int Q=1000002;
 
int nr;
int lst[KEY],val[Q],urm[Q];
 
FILE * in;
FILE * out;
 
void inline adauga(int x)
{
    int r=x&(KEY-1);
    val[++nr]=x;
    urm[nr]=lst[r];
    lst[r]=nr;
}
 
bool inline caut(int x)
{
    int p=lst[x&(KEY-1)];
    while(p!=0 && val[p]!=x)
        p=urm[p];
    return p!=0;
}
 
void inline sterge(int x)
{
    int r=x&(KEY-1),p;
    if(x==val[lst[r]])
    {
        lst[r]=urm[lst[r] ];
        return;
    }
    p=lst[r];
    while(urm[p]!=0 && val[urm[p]]!=x)
        p=urm[p];
    if(val[urm[p]]==x)
        urm[p]=urm[urm[p]];
}
 
int main()
{
    in=fopen("hashuri.in","r");
    out=fopen("hashuri.out","w");
 
    int n;
 
    fscanf(in,"%d",&n);
 
    int tipe,x;
 
    for(int i=1; i<=n; i++)
    {
        fscanf(in,"%d%d",&tipe,&x);
 
        if(tipe==1)
        {
            if(!caut(x))
                adauga(x);
        }else
            if(tipe==2)
            {
                sterge(x);
            }else
            if(tipe==3)
            {
                if(caut(x))
                    fprintf(out,"1\n");
                else
                    fprintf(out,"0\n");
 
            }
 
    }
 
    return 0;
}