Cod sursa(job #1331972)

Utilizator adriaadriana constantin adria Data 1 februarie 2015 15:01:21
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.35 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
long nmax=666017;
struct nod
{
   long inf;
    nod *urm;
}*v[666018],*p;
long n,i,op,x;
void adaug(nod *&p,long x)
{
    nod *q;
    q=new nod;q->inf=x;q->urm=p;p=q;

}
void sterge(nod *&p)
{
    nod *q,*r;

    if(p)

    {
        if (p->urm==NULL )
        {if(p->inf==x)
            {delete p;p=NULL;}
        }
        else if(p->inf==x)
        {
            r=p;p=p->urm;delete r;
        } else
        {
            q=p;
            while(q->urm!=NULL && q->urm->inf!=x)
                q=q->urm;
                if (q->urm->inf==x)

                {    r=q->urm;
                q->urm=q->urm->urm;
                 delete r;


        }
    }
}}
int exista(long x)
{
    nod *p;
    p=v[x%nmax];
    while(p && p->inf!=x)
        p=p->urm;
    if(p) return 1;
    else return 0;
}
/*void afis(nod *p)
{
    while(p)
    {
        cout<<p->inf<<" ";
        p=p->urm;
    }
    cout<<endl;
}*/
int main()
{
   f>>n;
   for(i=1;i<=n;i++)
   {
       f>>op>>x;
//cout<<op<<x<<endl;
       if (op==1)
        adaug(v[x%nmax],x);
       else if(op==2)


          sterge(v[x%nmax]);
          else  g<<exista(x)<<endl;
//afis(v[x%nmax]);
   }
   g.close();
    return 0;
}