Pagini recente » Cod sursa (job #946081) | Cod sursa (job #39022) | Cod sursa (job #1624962) | Cod sursa (job #1674571) | Cod sursa (job #459014)
Cod sursa(job #459014)
#include <stdio.h>
#include <string.h>
#define Nmax 2000000
int hash[Nmax], n;
int psr = 1234;
inline int f1(int nr) {
return ((nr + 242154) % 999959) + (nr % 999007);
}
inline int f2(int nr) {
return ((nr + 959154) % 999961) + (nr % 999023);
}
inline void add(int nr) {
int h1 = f1(nr);
int h2 = f2(nr);
if ((hash[h1] == nr) || (hash[h2] == nr))
return ;
if (hash[h1] == 0) {
hash[h1] = nr;
return ;
}
if (hash[h2] == 0) {
hash[h2] = nr;
return ;
}
if (psr & 1) {
int tmp = hash[h1];
hash[h1] = nr;
add(tmp);
psr = (psr * 92742131)^0xffffffff;
}
else {
int tmp = hash[h2];
hash[h2] = nr;
add(tmp);
psr = (psr * 92742131)^0xffffffff;
}
}
inline int search(int nr) {
if (hash[f1(nr)] == nr)
return 1;
if (hash[f2(nr)] == nr)
return 1;
return 0;
}
inline void erase(int nr) {
if (hash[f1(nr)] == nr)
hash[f1(nr)] = 0;
if (hash[f2(nr)] == nr)
hash[f2(nr)] = 0;
}
char buf1[8192];
char buf2[8192];
int main() {
freopen("hashuri.in", "r", stdin );
freopen("hashuri.out", "w", stdout);
setbuf(stdin , buf1);
setbuf(stdout, buf2);
scanf("%d", &n);
int tip, nr;
while (n--) {
scanf("%d%d", &tip, &nr);
if (tip == 1)
add(nr);
if (tip == 2)
erase(nr);
if (tip == 3)
printf("%d\n", search(nr));
}
return 0;
}