Pagini recente » Cod sursa (job #908453) | Cod sursa (job #220712) | Cod sursa (job #2845395) | Cod sursa (job #303162) | Cod sursa (job #2881816)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
/// Operatii:
/// Add(x) -> adauga pe x in multime
/// Erase(x) -> scoate pe x din multime
/// Exists(x) -> verifica daca x se afla in multime
class Hash {
private:
static const int MOD = 939391;
vector<int> buckets[MOD + 5];
public:
void add(int x) {
int x_bucket = x % MOD;
// verific daca x se afla deja in bucket
for(int i = 0; i < buckets[x_bucket].size(); i++)
if(buckets[x_bucket][i] == x)
return;
// daca nu se afla il adaug
buckets[x_bucket].push_back(x);
}
void del(int x) {
int x_bucket = x % MOD;
// il caut pe x in bucket
for(int i = 0; i < buckets[x_bucket].size(); i++)
if(buckets[x_bucket][i] == x) {
buckets[x_bucket].erase(buckets[x_bucket].begin() + i);
return;
}
}
bool exists(int x) {
int x_bucket = x % MOD;
for(int i = 0; i < buckets[x_bucket].size(); i++)
if(buckets[x_bucket][i] == x)
return true;
return false;
}
};
int main() {
freopen("hashuri.in", "r", stdin);
freopen("hashuri.out", "w", stdout);
Hash my_hash;
int n, op, x;
scanf("%d", &n);
for(int i = 1; i <= n; i++) {
scanf("%d %d", &op, &x);
if(op == 1)
my_hash.add(x);
else if(op == 2)
my_hash.del(x);
else if(op == 3)
printf("%d\n", my_hash.exists(x));
}
return 0;
}