Cod sursa(job #342999)

Utilizator RobybrasovRobert Hangu Robybrasov Data 24 august 2009 16:17:46
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <cstdio>
#include <vector>
#define MOD 666013
#define S_MAX 655536

using namespace std;

vector<int> L[MOD];
int poz=-1;
char S[S_MAX];

void insert(int x)
{
    int nr=x%MOD;
    L[nr].push_back(x);
}

int query(int x)
{
    int nr=x%MOD;
    vector<int>::iterator it;
    for (it=L[nr].begin(); it!=L[nr].end() && *it!=x; it++);

    return it!=L[nr].end();
}

void erase(int x)
{
    int nr=x%MOD;
    vector<int>::iterator it;
    for (it=L[nr].begin(); it!=L[nr].end() && *it!=x; it++);
    if (it!=L[nr].end()) L[nr].erase(it);
}

void read(int &x)
{
    x=0;
    for (; S[poz]<'0' || S[poz]>'9'; ++poz)
        if (poz==S_MAX-1)
        {
            fread(S,1,S_MAX,stdin);
            poz=-1;
        }

    for (; S[poz]>='0' && S[poz]<='9'; ++poz)
    {
        x=10*x+S[poz]-'0';
        if (poz==S_MAX-1)
        {
            fread(S,1,S_MAX,stdin);
            poz=-1;
        }
    }
}

int main()
{
    int n,op,x;
	freopen("hashuri.in","r",stdin);
	freopen("hashuri.out","w",stdout);
	fread(S,1,S_MAX,stdin);
    read(n);
    while (n--)
    {
        read(op); read(x);
        switch (op)
        {
            case 1:if (!query(x)) insert(x); break;
            case 2:if (query(x)) erase(x); break;
            case 3:printf("%d\n",query(x)); break;
        }
    }

    return 0;
}