Cod sursa(job #1074009)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 6 ianuarie 2014 23:59:23
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.47 kb
#include <fstream>
#include <list>

using namespace std;

#define mod1 299993
#define mod2 299983

list<int> v1[mod1];
list<int> v2[mod2];

list<int>::iterator find1(int x)
{
   int b=x%mod1;
   list<int>::iterator it;
   for(it=v1[b].begin();it!=v1[b].end();it++)
     if(*it==x)
       break;
   return it;
}

list<int>::iterator find2(int x)
{
   int b=x%mod2;
   list<int>::iterator it;
   for(it=v2[b].begin();it!=v2[b].end();it++)
     if(*it==x)
       break;
   return it;
}

void insert(int x)
{
   int b1=x%mod1;
   int b2=x%mod2;

   if(find1(x)==v1[b1].end() && find2(x)==v2[b2].end())
   {
      if(v1[b1].size()<v2[b2].size())
           v1[b1].push_back(x);
      else
           v2[b2].push_back(x);
   }
}

void del(int x)
{
   int b1=x%mod1;
   int b2=x%mod2;

   list<int>::iterator it1=find1(x);
   list<int>::iterator it2=find2(x);

   if(it1!=v1[b1].end())
     v1[b1].erase(it1);

   if(it2!=v2[b2].end())
     v2[b2].erase(it2);
}

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

    int n,cod,x,i;

    fin>>n;
    for(i=0;i<n;i++)
    {
       fin>>cod>>x;
       if(cod==1)
         insert(x);
       else if(cod==2)
         del(x);
       else
       {
          if(find1(x)!=v1[x%mod1].end() || find2(x)!=v2[x%mod2].end())
            fout<<"1\n";
          else
            fout<<"0\n";
       }
    }

    fin.close();
    fout.close();
    return 0;
}