Cod sursa(job #316724)

Utilizator ssergiussSergiu-Ioan Ungur ssergiuss Data 20 mai 2009 21:43:34
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
# include <algorithm>
using namespace std;

# define DIM 1 << 20

struct hash {
	int val;
	hash *urm;
};

int t;
hash *lst[DIM];

int check (int val) {

	int poz;
	hash *p;

	poz = val % DIM;
	for (p = lst[poz]; p; p = p->urm)
		if(p->val == val)
			return 1;

	return 0;
}

void add (int val) {

	int poz;

	poz = val % DIM;
	if (check (val))
		return;

	hash *p = new hash;

    p->val = val;
    p->urm = lst[poz];
    lst[poz] = p;
}

void del (int val) {

    int poz;
    hash *p, *q;

	poz = val % DIM;
	if (lst[poz] == NULL)
        return;

    if (lst[poz]->val == val){

        p = lst[poz];
        lst[poz] = p->urm;
        delete p;

        return;
    }
    q = NULL;
    for (p = lst[poz]; p; q = p, p = p->urm)
        if (p->val == val){

			q->urm = p->urm;
			delete p;

            return;
        }
}

int main () {

    int i, x, tip;

    freopen ("hashuri.in", "r", stdin);
    freopen ("hashuri.out", "w", stdout);

    scanf ("%d", &t);
    for (i = 0; i < t; ++ i){

        scanf ("%d%d", &tip, &x);
        if (tip == 1)
            add (x);
        else if (tip == 2)
            del (x);
        else if (tip == 3)
			printf ("%d\n", check (x));
    }

    return 0;
}