Cod sursa(job #918392)

Utilizator alexandrul_21Niculescu Mihai alexandrul_21 Data 18 martie 2013 20:37:57
Problema Hashuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#include <stdio.h>
#define MOD 2000000
using namespace std;
struct nod
{
    int nr,sw;
    nod *left,*right;
}*First[MOD+5];
int N;
nod * CreateNewNod(int nr)
{
    nod *q=new nod;
    q->nr=nr;
    q->sw=1;
    q->left=0;
    q->right=0;
    return q;
}
void Insert(nod *&p,int nr)
{
    if(p==0)
    {
        p=CreateNewNod(nr);
        return;
    }
    if(p->nr==nr)
    {
        p->sw=1;
        return;
    }
    if(p->nr>nr)
        Insert(p->left,nr);
    else
        Insert(p->right,nr);
}
void Delete(nod *p,int nr)
{
    if(p==0)
        return;
    if(p->nr==nr)
    {
        p->sw=0;
        return;
    }
    if(p->nr>nr)
        return Delete(p->left,nr);
    return Delete(p->left,nr);
}
int Search(nod *p,int nr)
{
    if(p==0)
        return 0;
    if(p->nr==nr)
    {
        if(p->sw==1)
            return 1;
        return 0;
    }
    if(p->nr>nr)
        return Search(p->left,nr);
    return Search(p->left,nr);
}
void Read()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    scanf("%d\n",&N);
    int i,nr,sw,nrh;
    for(i=1;i<=N;i++)
    {
        scanf("%d %d\n",&sw,&nr);
        nrh=nr%MOD;
        if(sw==1)
        {
            Insert(First[nrh],nr);
        }
        else if(sw==2)
        {
            Delete(First[nrh],nr);
        }
        else
            printf("%d\n",Search(First[nrh],nr));
    }
    fclose(stdin);
    fclose(stdout);
}
int main()
{
    Read();
    return 0;
}