Pagini recente » Cod sursa (job #2106939) | Cod sursa (job #2860295) | Cod sursa (job #2441866) | Cod sursa (job #2123349) | Cod sursa (job #1180119)
#include <fstream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;
#define MOD 666013
ifstream f("hashuri.in");
ofstream g("hashuri.out");
int T, op, number, a[32];
vector<int> G[MOD];
void constructVector() {
srand(time(0));
for (int i = 0, value = rand() % 20810 + 1; i < 32; ++i, value += rand() % 20810 + 1)
a[i] = value;
}
inline int h(int number) {
int keyValue = 0;
for (int i = 0; i < 32; ++i, keyValue %= MOD)
keyValue += a[i] * (number & (1 << i));
return keyValue % MOD;
}
inline vector<int>::iterator findValue(int number) {
int key = h(number);
for (auto it = G[key].begin(); it != G[key].end(); ++it)
if (*it == number)
return it;
return G[key].end();
}
inline void insertValue(int number) {
int key = h(number);
if (findValue(number) == G[key].end())
G[key].push_back(number);
}
inline void eraseValue(int number) {
int key = h(number);
auto it = findValue(number);
if (it != G[key].end())
G[key].erase(it);
}
int main() {
constructVector();
for (f >> T; T; --T) {
f >> op >> number;
if (op == 1) insertValue(number);
else if (op == 2) eraseValue(number);
else g << (findValue(number) != G[h(number)].end()) << "\n";
}
}