Cod sursa(job #315991)

Utilizator warchildmdMihail Burduja warchildmd Data 17 mai 2009 22:09:40
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.8 kb
#include<stdio.h>
#include<list>
#include<vector>
#define DIM 8192
using namespace std;

vector<int> H[666013];
char ax[DIM+16];
int pz;

inline void cit(int &x)
{
            x=0;
            while((ax[pz]<'0' || ax[pz]>'9') && (ax[pz]!='-'))
                        if(++pz==DIM)fread(ax, 1, DIM, stdin), pz=0;
            int neg=0;
            if(ax[pz]=='-')
            {
                        neg=1;
                        if(++pz==DIM)fread(ax, 1, DIM, stdin),pz=0;
            }
            while(ax[pz]>='0' && ax[pz]<='9')
            {
                        x=x*10+ax[pz]-'0';
                        if(++pz==DIM)fread(ax,1, DIM, stdin),pz=0;
            }
            if(neg) x=-x;
}

inline vector<int>::iterator find_value(int v)
{
    int h = v % 666013;
    vector<int>::iterator it;

    for (it = H[h].begin(); it != H[h].end(); ++it)
        if (*it == v)
            return it;
    return H[h].end();
}

inline void insert(int v)
{
    int h;
    h=v%666013;
    if(find_value(v)==H[h].end())
    H[h].push_back(v);
}

inline void del(int v)
{
    int h;
    h=v%666013;
    vector<int>::iterator it=find_value(v);
    if(it!=H[h].end())
    H[h].erase(it);
}

inline int find(int v)
{
    int h=v%666013;
    for(vector<int>::iterator it=H[h].begin(); it != H[h].end(); ++it)
    if( *it == v) return 1;
    return 0;
}

int main()
{
    int N, x;
    int v;
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    cit(N);
    for(;N;N--)
    {
        cit(x);
        cit(v);
        if(x==1)
        {
            insert(v);
            continue;
        }
        else if(x==2)
        {
            del(v);
            continue;
        }
        printf("%d\n",find(v));
    }
    return 0;
}