Cod sursa(job #1190991)

Utilizator OnimushaLordTiberiu Copaciu OnimushaLord Data 26 mai 2014 09:27:52
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
# include <cstdio>
# define N (2<<20)
# define MOD 666013

using namespace std;

struct point
{
    int inf;
    point *leg;
}*h[N],*p,*q,*u,*prim;

int i,n,op,x,ind;

bool find(int x, int ind)
{
    for(p=h[ind]; p!=NULL; p=p->leg)
        if(p->inf==x) return true;
    return false;
}
point *stergere(int x, int ind)
{
    point *t;
    u=NULL;
    p=h[ind];
    while(p!=NULL && p->inf!=x)
    {
        u=p;
        p=p->leg;
    }
    if(h[ind]!=NULL && h[ind]->inf==x)
    {
        t=h[ind];
        h[ind]=h[ind]->leg;
        delete t;
    }
    else if(p!=NULL)
    {
        u->leg=p->leg;
        delete p;
    }
    return h[ind];
}
int main()
{
    freopen("hashuri.in", "r", stdin);
    freopen("hashuri.out", "w", stdout);
    scanf("%d\n", &n);
    for(i=1; i<N; ++i)
        h[i]=NULL;
    for(i=1; i<=n; ++i)
    {
        scanf("%d %d\n", &op, &x);
        ind=x%MOD;
        if(op==1 && !find(x,ind))
        {
            q=new point;
            q->leg=h[ind];
            q->inf=x;
            h[ind]=q;
        }
        else if(op==2) h[ind]=stergere(x,ind);
        else if(op==3) printf("%d\n", find(x,ind));
    }
}