Pagini recente » Cod sursa (job #2170744) | Cod sursa (job #1781544) | Cod sursa (job #1881344) | Istoria paginii runda/avram_simulare_3/clasament | Cod sursa (job #713366)
Cod sursa(job #713366)
#include<cstdio>
using namespace std;
const int M = 2999999; int H[M];
int h(int x, int i){
return (x % M + i * (1 + x % (M - 1))) % M;
}
int Cauta(int x){
int i, ind;
for (i = 0; i < M; i++){
ind = h(x, i);
if (H[ind] == 0) return -1;
if (H[ind] == x) return ind;
}
}
void Insereaza(int x){
int i, ind;
if (Cauta(x) == -1)
for (i = 0; i < M; i++){
ind = h(x, i);
if (H[ind] <= 0) {H[ind] = x; return;}
}
}
void Sterge(int x){
int ind = Cauta(x);
if (ind != -1) H[ind] = -1;
}
int main(){
freopen ("hashuri.in", "r", stdin), freopen("hashuri.out", "w", stdout);
int i, n, x, op;
scanf("%d", &n);
for (i = 0; i < n; i++){
scanf("%d %d", &op, &x);
if (op == 1) Insereaza(x);
if (op == 2) Sterge(x);
if (op == 3) printf("%d\n", Cauta(x) == -1 ? 0 : 1);
}
}