Cod sursa(job #904629)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 4 martie 2013 17:24:49
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
 
#define MOD1 666013
#define MOD2 181
 
vector <int> v1[MOD1],v2[MOD2];
 
inline int cauta(int x)
{
    int i,k,n;
	k=x%MOD1;
	n=v1[k].size()-1;
    for(i=0;i<=n;i++)
        if(v1[k][i]==x)
            return i;
	k=x%MOD2;
	n=v2[k].size()-1;
	for(i=0;i<=n;i++)
		if(v2[k][i]==x)
			return i;
	return -1;
}
 
void adauga(int x)
{
	int k;
    if(cauta(x)==-1) {
		k=x%MOD1;
		if(v1[k].size()<=v2[x%MOD2].size()) 
			v1[k].push_back(x);
		else v2[x%MOD2].push_back(x);
	}
}
 
void sterge(int x)
{
    int poz;
    poz=cauta(x);
    if(poz!=-1) {
		if(v1[x%MOD1][poz]==x) 
			v1[x%MOD1].erase(v1[x%MOD1].begin()+poz);
		else v2[x%MOD2].erase(v2[x%MOD2].begin()+poz);
	}
}
int main ()
{
    int n,i,op,x;
    ifstream f("hashuri.in");
    ofstream g("hashuri.out");
    f>>n;
    for(i=1;i<=n;i++) {
        f>>op>>x;
        if(op==1)
            adauga(x);
        else if(op==2)
            sterge(x);
        else {
            if(cauta(x)==-1)
                g<<"0"<<'\n';
            else g<<"1"<<'\n';
        }
    }
    f.close();
    g.close();
}