Pagini recente » Cod sursa (job #2193776) | Cod sursa (job #144982) | Cod sursa (job #2063014) | Cod sursa (job #3341913) | Cod sursa (job #3323878)
#include <stdio.h>
#include <stdlib.h>
const int MAX = 1e6 + 3;
struct lista {
int k;
struct lista *next;
};
int exista (struct lista *l, int x) {
for (struct lista *p = l; p ; p = p->next)
if (p->k == x)
return 1;
return 0;
}
void adaugare (struct lista **l, int x) {
struct lista *aux = malloc(sizeof(struct lista));
aux->k = x;
aux->next = *l;
*l = aux;
}
void stergere (struct lista **l, int x) {
struct lista *p = *l;
if (p->k == x) {
*l = p->next;
free(p);
return;
}
for (;p->next->k != x; p = p->next);
struct lista *out = p->next;
p->next = out->next;
free(out);
}
int main() {
struct lista *H[MAX];
for (int i = 0; i < MAX; ++i)
H[i] = NULL;
FILE *fin, *fout;
fin = fopen("hashuri.in", "r");
fout = fopen("hashuri.out", "w");
int n;
fscanf(fin, "%d", &n);
for (int i = 0; i < n; ++i) {
int op, x;
fscanf(fin, "%d %d", &op, &x);
int ind = (x % MAX + MAX) % MAX;
if (op == 3)
fprintf(fout, "%d\n", exista(H[ind], x));
else {
if (op == 1) {
if (!exista(H[ind], x))
adaugare(&H[ind], x);
}
else {
if (exista(H[ind], x))
stergere(&H[ind], x);
}
}
}
return 0;
}