Cod sursa(job #2011638)

Utilizator infomaxInfomax infomax Data 16 august 2017 20:16:35
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

ifstream F("hashuri.in");
ofstream G("hashuri.out");

int n, q, v[1000005], nxt[1000005], L[666016], x;
const int MOD = 666013;

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

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

int main()
{
    F >> n;
    for(int i = 1; i <= n; ++ i)
    {
        F >> q >> v[i];
        if(q == 1)
        {
            nxt[i] = L[v[i]%MOD];
            L[v[i]%MOD] = i;
        }
        else
        {
            if(caut(v[i], i))
            {
                if(q == 3) G << "1\n";
                else sterg(v[i]);
            }
            else if(q == 3) G << "0\n";
        }
    }
    return 0;
}