Cod sursa(job #568291)

Utilizator lalasCont de teste lalas Data 31 martie 2011 00:10:14
Problema Hashuri Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<fstream>

using namespace std;
const int filter_size = 6000000;

ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

int t = 4435427 , m = 4869863;
int i , j , n , mod[10] , type , nr;
short int filter[filter_size];

void insert( int val ) {
	int i;
	for( i = 0 ; i <= 6 ; ++i ) 
		filter[val % mod[i]]++;
	filter[(val xor t) % m] ++;
}

void erase (int val) {
	int i;
	for( i = 0 ; i <= 6 ; ++i )
		filter[val % mod[i]]--;
	filter[(val xor t) % m]--;
}

int query( int val ) {
	int i;
	for( i = 0 ; i <= 6 ;++i )
		if ( filter[val % mod[i]] <= 0 ) return 0;
	if ( filter[(val xor t) % m] <= 0)
		return 0;
	
return 1;
}

int main()
{
	fin >> n;
	mod[0] = 333333;	
	mod[1] = 997, mod[2] = 45097 ,	
	mod[3] = 999017 , mod[4] = 2750159 , mod[5] = 5421751 , mod[6] = 7;
	
	for( i = 1 ; i <= n ; ++i ) {
		fin >> type >> nr;
		if ( type == 1 )
			if ( query(nr) == 0 )
				insert(nr);
		if ( type == 2 ) 
			if ( query(nr) == 1) 
				erase(nr);
		if ( type == 3 )
			fout << query(nr) <<"\n";
	}
	
return 0;
}