Cod sursa(job #1503503)

Utilizator TeodorCotetCotet Teodor TeodorCotet Data 16 octombrie 2015 13:07:51
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>

using namespace std;

const int NMAX = 1000001;
const int M = 1500000;

int N;

int h[M];
bool viz[M];
bool filled[M];


void adauga(int key) {

	int value = key % M;
	int i = 1;

	while(filled[value])  {


		value += i;
		i++;

		if(value >= M)
			value %= M;
	}

	filled[value] = true;
	viz[value] = true;
	h[value] = key;
}

void sterge(int key) {

	int value = key % M;

	for(int i = 1; h[value] != key && viz[value] == true && i < M; ++i) {
		
		value += i;

		if(value >= M)
			value %= M;
	}

	if(h[value] == key)
		filled[value] = false;
}

int interogare(int key) {

	int value = key % M;

	for(int i = 1;	viz[value] == true && h[value] != key && i < M; ++i) {
		
		value += i;

		if(value >= M)
			value %= M;
	}

	if(h[value] == key && filled[value] == true)
		return 1;

	return 0;
}


int main() {

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

	fin >> N;

	while(N--) {

		int type; int x;

		fin >> type >> x;

		switch(type) {

			case 1: adauga(x); break;
			case 2: sterge(x); break;
			case 3: fout << interogare(x) << '\n'; break;
		}
	}

	return 0;
}