Cod sursa(job #1182192)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 4 mai 2014 23:53:22
Problema Hashuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 2.54 kb
#include <fstream>
#include <iostream>
#include <string>
#include <complex>
#include <cmath>
#include <set>
#include <vector>
#include <map>
#include <queue>
#include <cstdio>
#include <stack>
#include <algorithm>
#include <list>
#include <bitset>
#include <ctime>
#include <climits>
#include <cassert>
#include <iomanip>

using namespace std;

const string file = "hashuri";
const string inputF = file + ".in";
const string outputF = file + ".out";

const double epsilon = 1e-7;
#define LL long long
#define ULL unsigned long long 
#define MOD1 666013
#define MOD2 666019
#define MOD3 1999999973
#define base 73

typedef vector<int> vi;
typedef vector<long long> vl;
typedef vector<bool> vb;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef vector<double> vd;
typedef vector<string> vs;
typedef pair<int, int> ii;
typedef pair<long long, long long> ll;
typedef pair<double, double> dd;
typedef vector<ii> vii;
typedef vector<ll> vll;
typedef vector<dd> vdd;

#define all(V) V.begin(), V.end()
#define allr(V) V.rbegin(), V.rend()
#define for_c_it(container, it) for (auto it : container)
#define present(container, element) (container.find(element) != container.end()) 
#define sz(a) int((a).size()) 
#define pb push_back 
#define mp make_pair
#define zeroes(x) ((x ^ (x - 1)) & x)
#define maxn 200001

class Node {
public:
	int value;
	Node *to;
	Node(int x) {
		value = x;
		to = NULL;
	}
};

Node *HH[MOD2];
int N;

int main() {
#ifndef INFOARENA
	freopen("input.txt", "r", stdin);
#else 
	freopen(inputF.c_str(), "r", stdin);
	freopen(outputF.c_str(), "w", stdout);
#endif
	int i, cod, x, pos;
	bool find;
	Node *p, *q;
	
	scanf("%d", &N);
	for (i = 0; i < N; ++i) {
		scanf("%d %d", &cod, &x);
		pos = x % MOD2;
		find = false;
		//cout << cod << '\n';
		if (cod == 1) {
			p = HH[pos];
			while (p != NULL) {
				if (p -> value == x) {
					find = true;
					break;
				}
				p = p -> to;
			}
			if (find == false) {
				p = new Node(x);
				p -> to = HH[pos];
				HH[pos] = p;
			}
		}
		else if (cod == 2) {
			p = HH[pos];
			if (p != NULL && p -> value == x) {
				HH[pos] = HH[pos] -> to;
				delete p;
				continue;
			}
			if (p != NULL)
			while (p -> to != NULL) {
				if (p -> to -> value == x) {
					find = true;
					break;
				}
				p = p -> to;
			}
			if (find == true) {
				q = p -> to;
				p -> to = p -> to -> to;
				delete q;
			}
		}
		else {
			p = HH[pos];
			while (p != NULL) {
				if (p -> value == x) {
					find = true;
					break;
				}
				p = p -> to;
			}
			if (find) {
				cout << "1\n";
			}
			else {
				cout << "0\n";
			}
		}
	}

	return 0;
}