Cod sursa(job #329811)

Utilizator dudu77tTudor Morar dudu77t Data 7 iulie 2009 17:20:21
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <cstdio>
#include <vector>

using namespace std;

const int prim = 666013;
vector<int> hash[prim];

void add( int );
void remove( int );
bool find( int );

int main()
{
	freopen( "hashuri.in", "r", stdin );
	freopen( "hashuri.out", "w", stdout );
	int n, op, no;
	scanf( "%d", &n );
	for ( int i = 1; i <= n; ++i )
	{
		scanf( "%d%d", &op, &no );
		if ( op == 1 )
			add( no );
		else if ( op == 2 )
			remove( no );
		else
			printf( "%d\n", find( no ) );
	}
}

void add( int no )
{
	vector<int>::iterator it = hash[no%prim].begin(), end = hash[no%prim].end();
	for ( ; it != end; ++it )
		if ( *it == no )
			return;
	hash[no%prim].push_back( no );
}

void remove( int no )
{
	vector<int>::iterator it = hash[no%prim].begin(), end = hash[no%prim].end();
	for ( ; it != end; ++it )
		if ( *it == no )
		{
			*it = hash[no%prim].back();
			hash[no%prim].pop_back();
			return;
		}
}

bool find( int no )
{
	vector<int>::iterator it = hash[no%prim].begin(), end = hash[no%prim].end();
	for ( ; it != end; ++it)
		if ( *it == no )
			return 1;
	return 0;
}