Pagini recente » Cod sursa (job #2430245) | Cod sursa (job #704330) | Cod sursa (job #3175106) | Cod sursa (job #2830608) | Cod sursa (job #459010)
Cod sursa(job #459010)
#include <stdio.h>
#include <string.h>
#define Nmax 1000000
int hash[Nmax], n;
int psr = 1234;
inline int f1(int nr) {
return (nr + 242154) % 999959;
}
inline int f2(int nr) {
return (nr + 759154) % 999961;
}
inline void add(int nr) {
int h1 = f1(nr);
int h2 = f2(nr);
if (hash[f1(nr)] == nr)
return ;
if (hash[f2(nr)] == 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;
}
int main() {
freopen("hashuri.in", "r", stdin );
freopen("hashuri.out", "w", stdout);
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;
}