Cod sursa(job #2698497)

Utilizator lucamLuca Mazilescu lucam Data 22 ianuarie 2021 12:09:46
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <utility>

constexpr int N = 1000000;
constexpr int MOD = 666019;
int next[N], v[N], lst[MOD], nr;

void initialize() {
    for (int i = 0; i < MOD; ++i) {
        lst[i] = -1;
    }
}

void insert(int x) {
    int m = x % MOD;
    next[nr] = lst[m];
    lst[m] = nr;
    v[nr++] = x;
}

int search(int x) {
    int m = x % MOD;
    int p = lst[m];
    while (p != -1) {
        if (v[p] == x)
            break;
        p = next[p];
    }
    return p;
}

void remove(int x) {
    int m = x % MOD;
    int p = search(x);
    if (p == -1) {
        return;
    }
    std::swap(v[p], v[lst[m]]);
    lst[m] = next[lst[m]];
}

int main() {
    initialize();

    std::ifstream in("hashuri.in");
    std::ofstream out("hashuri.out");
    int n;
    in >> n;
    for (int i = 0; i < n; ++i) {
        int op, arg;
        in >> op >> arg;
        switch (op) {
        case 1:
            insert(arg);
            break;
        case 2:
            remove(arg);
            break;
        case 3:
            out << (search(arg) != -1) << '\n';
        default:;
        }
    }
}