Pagini recente » Cod sursa (job #2616714) | Cod sursa (job #513824) | Cod sursa (job #2903833) | Cod sursa (job #1453592) | Cod sursa (job #894900)
Cod sursa(job #894900)
#include<cstdio>
#include<bitset>
using namespace std;
struct Hash_Table {
int hash_size, *H;
void create(int dim) {
int i, j, lim;
bool *prim;
dim*=4;
prim = new bool[dim+1];
fill(prim, prim+dim+1, false);
for(i=4; i<=dim; i*=2)
prim[i] = 1;
lim = 2;
for(i=3; i<=dim; i+=2) {
if(!prim[i]) {
lim = i;
for(j=i*2; j<=dim; j+=i)
prim[j] = 1;
}
}
hash_size = lim;
H = new int[hash_size+1];
fill(H, H+hash_size+1, 0);
}
int hash1(int val) {
return val % hash_size;
}
int hash2(int val) {
return (val % (hash_size - 1)) + 1;
}
int hash_key(int val, int poz) {
return (hash1(val) + poz * hash2(val)) % hash_size;
}
int find(int val) {
int i, j;
for(i=0; i<hash_size; ++i) {
j = hash_key(val, i);
if(H[j] == val)
return j;
if(H[j] == NULL)
return -1;
}
return -1;
}
void insert(int val) {
if(find(val) != -1)
return;
int i, j;
for(i=0; i<hash_size; ++i) {
j = hash_key(val, i);
if(H[j] == NULL || H[j] == -1) {
H[j] = val;
return;
}
}
}
void erase(int val) {
int poz = find(val);
if(poz == -1)
return;
else
H[poz] = -1;
}
};
int main() {
freopen("hashuri.in","r",stdin);
freopen("hashuri.out","w",stdout);
int T, op, x;
Hash_Table myHash;
scanf("%d",&T);
myHash.create(T);
while(T--) {
scanf("%d %d",&op,&x);
if(op == 1)
myHash.insert(x);
if(op == 2)
myHash.erase(x);
if(op == 3) {
if(myHash.find(x) != -1)
printf("1\n");
else
printf("0\n");
}
}
return 0;
}