Cod sursa(job #921224)

Utilizator alexandrul_21Niculescu Mihai alexandrul_21 Data 20 martie 2013 20:58:07
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 2.06 kb
#include <stdio.h>
#define MOD 1000000
using namespace std;
struct nod
{
    int nr;
    nod *next;
}*First[MOD+5];
int N;
void Insert(nod *p,int nr)
{
    if(p->next){
        if(p->next->nr==nr)
        {
            return;
        }
        if(p->next->nr<nr)
        {
            Insert(p->next,nr);
            return;
        }
    }
    nod *q=new nod;
    q->nr=nr;
    q->next=p->next;
    p->next=q;
}
void Query1(int nr)
{
    int modnr=nr%MOD;
    if(First[modnr]==0)
    {
        nod *q=new nod;
        q->nr=nr;
        q->next=0;
        First[modnr]=q;
        return;
    }
    if(nr<First[modnr]->nr)
    {
        nod *q=new nod;
        q->nr=nr;
        q->next=First[modnr];
        First[modnr]=q;
        return;
    }
    Insert(First[modnr],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;
        }
        if(nr>p->next->nr)
        {
            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||nr>p->nr)
        return 0;
    if(nr==p->nr)
        return 1;
    return Search(p->next,nr);
}
int Query3(int nr)
{
    int modnr=nr%MOD;
    if(First[modnr]==0)
        return 0;
    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;
}