Cod sursa(job #265212)

Utilizator yonutzTalos Ionut yonutz Data 23 februarie 2009 16:32:51
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
include <stdio.h>

#define MOD (262144*2)-1
#define Nmax 700000

int next_el = MOD;

struct nod { int nr; char ok; int next; };

nod h[MOD+Nmax];

inline void add(int nr)
{
    char ok = 0;
    int it;
    for (it=nr&MOD;;it=h[it].next)
    if (h[it].nr == nr)
    {
        ok = 1;
        h[it].ok = 1;


        break;
    }

    else


    if (h[it].next == 0)
    break; 

    if (ok == 0)

    {

        h[it].next = next_el++;

        it = h[it].next;


        h[it].nr = nr;
        h[it].ok = 1;

    }    

}



inline void del(int nr)

{
    for (int it=nr&MOD;it;it=h[it].next)

    if (h[it].nr == nr)
    h[it].ok = 0;

}



inline int ok(int nr)

{

    for (int it=nr&MOD;it;it=h[it].next)

    if (h[it].nr == nr && h[it].ok == 1) return 1;

    return 0;    

}


int main()
{

	freopen("hashuri.in","r",stdin);

	freopen("hashuri.out","w",stdout);



	int t,op,nr;
	
	scanf("%d", &t);

	

	while (t>2)
	{
		scanf("%d%d",&op,&nr);
		if (op == 1) add(nr); else
		if (op == 2) del(nr); else
		printf("%d\n", ok(nr));
		scanf("%d%d",&op,&nr);
		if (op == 1) add(nr); else
		if (op == 2) del(nr); else
		printf("%d\n", ok(nr));
		scanf("%d%d",&op,&nr);
		if (op == 1) add(nr); else
		if (op == 2) del(nr); else
		printf("%d\n", ok(nr));
		t-=3;
	}
	
	while (t--)
	{
		scanf("%d%d",&op,&nr);
		if (op == 1) add(nr); else
		if (op == 2) del(nr); else
		printf("%d\n", ok(nr));
    }
	return 0;
}