Cod sursa(job #237975)

Utilizator pauldbPaul-Dan Baltescu pauldb Data 31 decembrie 2008 00:14:12
Problema Hashuri Scor Ascuns
Compilator cpp Status done
Runda Marime 0.98 kb
#include <stdio.h>
#include <vector>
#include <assert.h>

using namespace std;

#define mod 1213131

int N;
vector <int> Hash[mod];

inline void add(int x)
{
	int y = x % mod, i, l = Hash[y].size();

	for (i=0; i<l; i++)
		if (Hash[y][i] == x) return;

	Hash[y].push_back(x);
}

inline void remove(int x)
{
	int y = x % mod, i, l = Hash[y].size();

	for (i=0; i<l; i++)
		if (Hash[y][i] == x)
		{
			Hash[y][i] = Hash[y][l-1];
			Hash[y].pop_back();
			return;
		}
}

inline int search(int x)
{
	int y = x % mod, i, l = Hash[y].size();

	for (i=0; i<l; i++)
		if (Hash[y][i] == x) return 1;

	return 0;
}

int main()
{
	freopen("hashuri.in", "r", stdin);
	freopen("hashuri.out", "w", stdout);

	int tip, i, x;

	scanf("%d ", &N);
	
	assert(1 <= N && N <= 1000000);

	for (i = 1; i <= N; i++) 
	{
		scanf("%d %d ", &tip, &x);

		assert(1<=tip && tip<=3);
		assert(1<=x && x<=2000000000);

		if (tip == 1) add(x);
		if (tip == 2) remove(x);
		if (tip == 3) printf("%d\n", search(x));
	}

	return 0;
}