Cod sursa(job #1365060)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 28 februarie 2015 00:12:20
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <vector>
#include <cstring>

#define MOD 666013

using namespace std;

class Hash{
public:
    vector<int> range[MOD];
    Hash(){
        memset(range,0,sizeof(range));
    }
    vector<int>::iterator Find(int k)
    {
        int pz = k % MOD;
        for(vector<int>::iterator it = range[pz].begin(); it != range[pz].end(); ++it)
            if(*it == k)
                return it;
        return range[pz].end();
    }
    void Erase(int k){
        vector<int>::iterator it = Find(k);
        if(it == range[k%MOD].end())
            return;
        range[k%MOD].erase(it);
    }
    void Insert(int k){
        vector<int>::iterator it = Find(k);
        if(it != range[k%MOD].end())
            return;
        range[k%MOD].push_back(k);
    }
};
Hash H;

int main()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);

    int N,t,v;
    scanf("%d",&N);
    for(int i = 1; i <= N; ++i)
    {
        scanf("%d%d",&t,&v);
        if(t == 1)
            H.Insert(v);
        else
            if(t == 2)
                H.Erase(v);
            else
                printf("%d\n",H.Find(v) != H.range[v%MOD].end());
    }

    return 0;
}