Cod sursa(job #1618764)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 27 februarie 2016 23:39:38
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#include <iomanip>
#define MOD 666013
#define NMAX 1000005
#define INF 0x3f3f3f3f
#define pb push_back

using namespace std;

FILE *fin = freopen("hashuri.in", "r", stdin);
FILE *fout = freopen("hashuri.out", "w", stdout);

typedef pair<int, int> pii;

vector<int> Hash[MOD];

inline vector<int>::iterator find(int x) {
	int list = x%MOD;
	vector<int>::iterator it;

	for (it = Hash[list].begin(); it != Hash[list].end(); ++it)
		if (x == *it)
			return it;

	return Hash[list].end();
}

inline void insert_val(int x) {
	int list = x%MOD;

	if (find(x) == Hash[list].end())
		Hash[list].push_back(x);
}

inline void delete_val(int x) {
	int list = x%MOD;

	vector<int>::iterator it = find(x);
	if (it != Hash[list].end())
		Hash[list].erase(it);
}

int main() {
	int i, n, op, cdiv, cnr, x, lastNr;

	scanf("%d", &n);

	for (i = 0; i < n; ++i) {
		scanf("%d%d", &op, &x);

		if (op == 1)
			insert_val(x);
		else if (op == 2)
			delete_val(x);
		else
			printf("%d\n", find(x) != Hash[x%MOD].end());
	}

	return 0;
}