Cod sursa(job #2616402)

Utilizator rusuandrei32Rusu Andrei-Cristian rusuandrei32 Data 18 mai 2020 13:28:13
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <bits/stdc++.h>
using namespace std;

#define itr(type, i, s, d) for (type i = s; i < d; ++i)
#define itrr(i, s, d) for (register int i = s; i < d; ++i)
#define pb(i) push_back(i)
#define IO ios_base :: sync_with_stdio(false); \
cin.tie(nullptr);
#define vi vector <int>
#define show(v) \
cout << "Debug:\n"; \
for (auto it = v.begin(); it != v.end(); ++it) \
	cout << *it << " "; \
cout << "\n";
#define vitr(v, it) \
for (auto it = v.begin(); it != v.end(); ++it)

typedef long long ll;

const int mod = 666013;

vi G[mod];

inline vi :: iterator cauta(int x) {
    int list_pos = x % mod;
    vitr(G[list_pos], i) {
        if (*i == x)
            return i;
    }
    return G[list_pos].end();
}

inline void adauga(int x) {
    int list_pos = x % mod;
    if (G[list_pos].end() == cauta(x))
        G[list_pos].pb(x);
}

inline void sterge(int x) {
    int list_pos = x % mod;
    vi :: iterator it = cauta(x);
    if (it != G[list_pos].end())
        G[list_pos].erase(it);
}

int main() {
	IO;

	freopen("hashuri.in", "r", stdin);
	freopen("hashuri.out", "w", stdout);

	int n, op, x;

	scanf("%d", &n);

	while (n--) {
        scanf("%d %d", &op, &x);

        switch(op) {
        case 1:
            adauga(x);
            break;
        case 2:
            sterge(x);
            break;
        case 3:
            printf("%d\n", cauta(x) != G[x % mod].end());
            break;
        }
	}
	return 0;
}