Cod sursa(job #344542)

Utilizator RobybrasovRobert Hangu Robybrasov Data 30 august 2009 15:20:18
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
/*
  liste inlantuite implementate de mana. se vede clar diferenta de memorie dintre 
  folosirea vectorilor din STL: http://infoarena.ro/job_detail/342999 si cele "manuale"
*/
#include <cstdio>
#define MOD 666013

struct adr
{
    int val;
    adr *urm;
} *L[MOD];

void insert(int x)
{
    int nr=x%MOD;
    adr *p=new adr;
    p->val=x; p->urm=L[nr];
    L[nr]=p;
}

int query(int x)
{
    int nr=x%MOD;
    adr *p;
    for (p=L[nr]; p && p->val!=x; p=p->urm);

    return p!=NULL;
}

void erase(int x)
{
    int nr=x%MOD;
    adr *p,*t;
    for (t=p=L[nr]; p->val!=x; p=p->urm) t=p;

	if (t==p)
	{
		t=L[nr];
		L[nr]=L[nr]->urm;
		delete t;

		return;
	}

	t->urm=p->urm;
	delete p;
}

int main()
{
    int n,op,x;
	freopen("hashuri.in","r",stdin);
	freopen("hashuri.out","w",stdout);
    scanf("%d",&n);
    while (n--)
    {
        scanf("%d%d",&op,&x);
        switch (op)
        {
            case 1:if (!query(x)) insert(x); break;
            case 2:if (query(x)) erase(x); break;
            case 3:printf("%d\n",query(x)); break;
        }
    }

    return 0;
}