Cod sursa(job #1237464)

Utilizator IliescuDanAndreiIliescu Dan Andrei IliescuDanAndrei Data 4 octombrie 2014 10:16:22
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>

using namespace std;
ifstream in("hashuri.in");
ofstream out("hashuri.out");

int m, R, lst[1000001], val[1000001], urm[1000001];

short int apartine(int x)
{
    int p=lst[x%R];
    while(p!=-1)
    {
        if(val[p]==x) return 1;
        p=urm[p];
    }
    return 0;
}

void adauga(int x)
{
    int r=x%R;
    if(apartine(x)) return;
    val[m]=x;
    urm[m++]=lst[r];
    lst[r]=m-1;
}

void sterg(int x)
{
    int r=x%R, p;
    p=lst[r];
    if(x==val[p]) lst[r]=urm[p];
    while(urm[p]!=-1)
    {
        if(urm[p]!=-1) urm[p]=urm[urm[p]];
        p=urm[p];
    }
}

int main()
{
    int n, op, x, i;
    in>>n;
    R=n/2;
    for(i=0;i<R;i++) lst[i]=-1;
    for(i=1;i<=n;i++)
    {
        in>>op>>x;
        if(op==1) adauga(x);
        if(op==2) sterg(x);
        if(op==3) out<<apartine(x)<<"\n";
    }
    return 0;
}