Cod sursa(job #921246)

Utilizator alexandrul_21Niculescu Mihai alexandrul_21 Data 20 martie 2013 21:07:31
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include <stdio.h>
#define MOD 1000000
using namespace std;
struct nod
{
    int nr;
    nod *next;
}*First[MOD+5];
int N;
void Insert(int nr)
{
    nod *q=new nod;
    q->nr=nr;
    q->next=First[nr%MOD];
    First[nr%MOD]=q;

}
void Query1(int nr)
{
    Insert(nr);
}
void Delete(nod *p,int nr)
{
    if(p->next)
    {
        if(p->next->nr==nr)
        {
            nod *q=p->next;
            p->next=q->next;
            delete q;
            return;
        }
        Delete(p->next,nr);
    }
}
void Query2(int nr)
{
    int modnr=nr%MOD;
    if(First[modnr]==0)
        return;
    if(First[modnr]->nr==nr)
    {
        nod *q=First[modnr];
        First[modnr]=q->next;
        delete q;
        return;
    }
    Delete(First[modnr],nr);
}
int Search(nod *p,int nr)
{
    if(p==0)
        return 0;
    if(nr==p->nr)
        return 1;
    return Search(p->next,nr);
}
int Query3(int nr)
{
    int modnr=nr%MOD;
    return Search(First[modnr],nr);
}
void Read()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    scanf("%d\n",&N);
    int i,nr,sw;
    for(i=1;i<=N;i++)
    {
        scanf("%d %d\n",&sw,&nr);
        if(sw==1)
            Query1(nr);
        else if(sw==2)
            Query2(nr);
        else
            printf("%d\n",Query3(nr));
    }
    fclose(stdin);
    fclose(stdout);
}
int main()
{
    Read();
    return 0;
}