Cod sursa(job #524235)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 20 ianuarie 2011 19:06:17
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <stdio.h>
#include <list>
using namespace std;
#define MOD 666013
#define FOR(i, v) for(list<int>::iterator i = v.begin(); i != v.end(); ++i)
const double A = 0.61803398;
list <int> v[MOD+10];
inline double afla(int x){
	return (double)A * x;
}
inline int key(int x){
	return (int) (MOD * (A * x - ((int)(A * x)) ) );
}
int find(int x){
	int p = key(x);
	FOR(i, v[p])
		if(*i==x)
			return 1;
	return 0;
}
void add(int x){
	int p = key(x);
	v[p].push_back(x);
}
void del(int x){
	int p = key(x);
	FOR(i, v[p])
		if(*i==x){
			v[p].erase(i);
			return ;
		}
}
int main(){
	freopen("hashuri.in", "r", stdin);
	freopen("hashuri.out", "w", stdout);
	int n;
	scanf("%d", &n);
	
	for(int i = 1; i <= n; ++i){
		int x, y;
		scanf("%d %d", &x, &y);
		if(x == 1)
			if(!find(y))
				add(y);
			else;
		else if(x == 2) del(y);
		else printf("%d\n",find(y));
	}
	
	return 0;
}