Cod sursa(job #2011677)

Utilizator infomaxInfomax infomax Data 16 august 2017 21:29:42
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, v[1000003], nxt[1000003], L[666014], q, nr;
const int MOD = 666013;

inline void adaug(int p, int x)
{
    v[p] = x;
    nxt[p] = L[x%MOD];
    L[x%MOD] = p;
}

inline int caut(int x)
{
    int p;
    p = L[x%MOD];
    while(p)
        if(v[p] == x) return 1;
        else p = nxt[p];
    return 0;
}

inline void sterg(int x)
{
    int p;
    p = L[x%MOD];
    if(v[p] == x)
        L[x%MOD] = nxt[L[x%MOD]];
    else
    {
        while(nxt[p])
            if(v[nxt[p]] == x)
            {nxt[p] = nxt[nxt[p]]; break;}
            else p = nxt[p];
    }
}

int main()
{
    fscanf(F, "%d ", &n);
    for(int i = 1; i <= n; ++ i)
    {
        fscanf(F, "%d %d ", &q, &nr);
        if(q == 1){if(!caut(nr)) adaug(i, nr);}
        else if(q == 3) fprintf(G, "%d\n", caut(nr));
        else if(caut(nr)) sterg(nr);
    }
    return 0;
}