Cod sursa(job #2623658)

Utilizator mihaimbMihai Badea mihaimb Data 3 iunie 2020 15:59:43
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.35 kb
#include <fstream>
#include <vector>

#define P 660013

using namespace std;


class lista
{
    private:
        class nod
        {
            public:
                long long nr;
                nod *urm;
        };
        nod *cap, *coada;
    public:
        lista()
        {
            cap = nullptr;
            coada = nullptr;
        }
        void adaug(long long n)
        {
            nod *tmp = new nod;
            tmp->nr = n;
            tmp->urm = nullptr;

            if(cap==nullptr)
            {
                cap = coada = tmp;
            }
            else
            {
                coada->urm = tmp;
                coada=coada->urm;
            }
        }
        void sterg(long long val)
        {
            if(cap!=nullptr)
            {
                nod *p=cap;
                while(p->urm!=nullptr)
                {
                    if(p->nr==val)
                    {
                        p->nr=-1;
                    }
                    p=p->urm;
                }

                if(p!=nullptr && p->nr==val)
                {
                    p->nr=-1;
                }
            }
        }
        bool exista(long long val)
        {
            if(cap==nullptr)
            {
                return false;
            }

            nod *p=cap;

            while(p->urm!=nullptr)
            {
                if(p->nr==val)
                {
                    return true;
                }
                p=p->urm;
            }

            if(p!=nullptr && p->nr==val)
            {
                return true;
            }

            return false;
        }
};

class mapp
{
    private:
        lista L[P];
    public:
        void adaug(long long val)
        {
            L[val%P].adaug(val);
        }
        void sterg(long long val)
        {
            L[val%P].sterg(val);
        }
        bool exista(long long val)
        {
            return L[val%P].exista(val);
        }

} M;


int main()
{

    ifstream fin("hashuri.in");
    ofstream fout("hashuri.out");

    int n,op;

    long long x;

    fin>>n;

    for(int i=0; i<n; i++)
    {
        fin>>op>>x;

        if(op==1)
        {
            M.adaug(x);
        }
        else if(op==2)
        {
            M.sterg(x);
        }
        else if(op==3)
        {
            fout<<M.exista(x)<<'\n';

        }
    }

    return 0;

}