Cod sursa(job #904624)

Utilizator SebiSebiPirtoaca George Sebastian SebiSebi Data 4 martie 2013 17:20:48
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;
 
#define MOD1 666013
#define MOD2 1009
 
vector <int> v1[MOD1],v2[MOD2];
int l1[MOD1],l2[MOD2];
 
inline int cauta(int x)
{
    int i,k;
	k=x%MOD1;
    for(i=0;i<=l1[k];i++)
        if(v1[k][i]==x)
            return i;
	k=x%MOD2;
	for(i=0;i<=l2[k];i++)
		if(v2[k][i]==x)
			return i;
	return -1;
}
 
void adauga(int x)
{
	int k;
    if(cauta(x)==-1) {
		k=x%MOD1;
		if(l1[k]<=l2[x%MOD2]) {
			v1[k].push_back(x);
			l1[k]++;
		}
		else {
			k=x%MOD2;
			v2[k].push_back(x);
			l2[k]++;
		}
	}
}
 
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);
			l1[x%MOD1]--;
		}
		else {
			v2[x%MOD2].erase(v2[x%MOD2].begin()+poz);
			l2[x%MOD2]--;
		}
	}
}
int main ()
{
    int n,i,op,x;
    ifstream f("hashuri.in");
    ofstream g("hashuri.out");
    f>>n;
	for(i=0;i<=MOD1-1;i++)
		l1[i]=-1;
	for(i=0;i<=MOD2-1;i++)
		l2[i]=-1;
    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();
}