Cod sursa(job #296677)

Utilizator andreisfrentSfrent Andrei andreisfrent Data 5 aprilie 2009 00:05:00
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <vector>

using namespace std;

#define ADAUGA 1
#define STERGE 2
#define VERIFICA 3

#define MOD 666013
#define key(x) x % MOD

vector<int> v[MOD];

inline vector<int>::iterator gaseste(int x, int k)
{
	vector<int>::iterator i;
	for(i = v[k].begin(); i != v[k].end(); ++i)
		if(*i == x)
			return i;
	return v[k].end();
}

void adauga(int x, int k)
{
	if(gaseste(x, k) == v[k].end())
		v[k].push_back(x);
}

void sterge(int x, int k)
{
	vector<int>::iterator i = gaseste(x, k);
	if(i != v[k].end())
		v[k].erase(i);
}


int main()
{
	int operatie, x, n;
	
	FILE* fi = fopen("hashuri.in", "r");
	FILE* fo = fopen("hashuri.out", "w");
	
	fscanf(fi, "%d", &n);
	
	while(n--)
	{
		fscanf(fi, "%d%d", &operatie, &x);
		if(operatie == ADAUGA) adauga(x, key(x));
		if(operatie == STERGE) sterge(x, key(x));
		if(operatie == VERIFICA)
		{
			int k = key(x);
			if(gaseste(x, k) == v[k].end()) fprintf(fo, "0\n");
			else fprintf(fo, "1\n");
		}
	}
	
	fclose(fi);
	fclose(fo);
	return 0;
}