Cod sursa(job #1184843)

Utilizator heracleRadu Muntean heracle Data 14 mai 2014 11:35:03
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#define 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;
}