Cod sursa(job #1233396)

Utilizator DiClauDan Claudiu DiClau Data 25 septembrie 2014 11:36:47
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include<stdio.h>
using namespace std;
const int L = 1000003;
long long val[L];
int urm[L], lst[5], m = 0;
const int R = 666019;
void adauga (int x)
{
    int tip = x % R;
    val[++m] = x;
    urm[m] = lst[tip];
    lst[tip] = m;
}
bool cauta (int x)
{
    int p = lst[x%R];
    while (p != 0)
    {
        if (x == val[p])
            return true;
        p = urm[p];
    }
    return false;
}
void sterge(int x)
{
    int tip = x % 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]];
            return;
        }
        p = urm[p];
    }
}
int main ()
{
    FILE *in, *out;
    in = fopen ("hashuri.in","r");
    out = fopen ("hashuri.out", "w");
    int intrebare, n, x;
    int i;
    fscanf(in, "%d", &n);
    for (i = 0; i < n; i++)
    {
        fscanf(in, "%d%d", &intrebare, &x);
        if (intrebare == 1)
        {
            if (cauta(x) == false)
                adauga(x);
        }
        if (intrebare == 2)
        {
            if (cauta(x) == true)
                sterge(x);
        }
        if (intrebare == 3)
        {
            if (cauta(x) == true)
                fprintf(out, "1\n");
            else
                fprintf(out,"0\n");
        }
    }
    return 0;
}