Cod sursa(job #1964882)

Utilizator DiClauDan Claudiu DiClau Data 13 aprilie 2017 19:25:12
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include<stdio.h>
using namespace std;
const int M = 100005, N = 1000005;
int lst[M], urm[N], v[N], nr;
void adauga (int x)
{
    int p = x % M;
    v[++nr] = x;
    urm[nr] = lst[p];
    lst[p] = nr;
}
bool cauta (int x)
{
    int p = lst[x % M];
    while (p != 0)
    {
        if (v[p] == x)
            return true;
        p = urm[p];
    }
    return false;
}
void sterge (int x)
{
    int p = lst[x % M];
    if (p == 0)
        return;
    if (v[p] == x)
    {
        lst[x % M] = urm[p];
        return;
    }
    int ant;
    ant = p;
    p = urm[p];
    while (p != 0)
    {
        if (v[p] == x)
        {
            urm[ant] = urm[p];
            return;
        }
        ant = p;
        p = urm[p];
    }

}
int main ()
{
    FILE *in, *out;
    in = fopen ("hashuri.in", "r");
    out = fopen ("hashuri.out", "w");
    int n, cerinta, i, x;
    fscanf (in, "%d", &n);
    for (i = 1; i <= n; i++)
    {
        fscanf (in, "%d%d", &cerinta, &x);
        if (cerinta == 1 && cauta(x) == false)
            adauga (x);
        if (cerinta == 2)
            sterge (x);
        if (cerinta == 3)
            fprintf (out, "%d\n", cauta(x));
    }
    return 0;
}