Cod sursa(job #1579202)

Utilizator Master011Dragos Martac Master011 Data 24 ianuarie 2016 15:31:28
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <stdio.h>

using namespace std;

FILE *in=fopen("hashuri.in","r");
FILE *out=fopen("hashuri.out","w");

const int R=666013, R2=406789;
const int N=1000001;

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

inline void adauga (int x)
{
    int tip= (x%R + x%R2) % R;
    val[++m]=x;
    urm[m]=lst[tip];
    lst[tip]=m;
}

void sterge (int x)
{
    int tip=(x%R + x%R2) % R, p;
    p=lst[tip];

    if(x==val[p])
        lst[tip]=urm[p];

    while(urm[p]!=0)
    {
        if(x==val[urm[p]])
            urm[p]=urm[urm[p]];
        p=urm[p];
    }
}

bool cauta (int x)
{
    int p=lst[(x%R + x%R2) % R];
    while(p!=0)
    {
        if(x==val[p])
            return 1;
        p=urm[p];
    }
    return 0;
}

int main()
{
    int n,i,op,x;

    fscanf(in,"%d",&n);

    for(i=0;i<n;i++)
    {
        fscanf(in,"%d%d",&op,&x);
        if(op==1)
            adauga(x);
        if(op==2)
            sterge(x);
        if(op==3)
            fprintf(out,"%d\n",cauta(x));
    }

    return 0;
}