Cod sursa(job #2524053)

Utilizator mirceamaierean41Mircea Maierean mirceamaierean41 Data 15 ianuarie 2020 00:03:51
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <vector>
#pragma warning(disable:4996)
using namespace std;

class InParser
{
private:
	FILE* fin;
	char* buff;
	int sp;
	char read_ch()
	{
		++sp;
		if (sp == 4096)
		{
			sp = 0;
			fread(buff, 1, 4096, fin);
		}
		return buff[sp];
	}
public:
	InParser(const char* nume)
	{
		fin = fopen(nume, "r");
		buff = new char[4096]();
		sp = 4095;
	}
	InParser & operator >> (int &n)
	{
		char c;
		while (!isdigit((c = read_ch())));
		n = c - '0';
		while (isdigit(c = read_ch()))
			n = n * 10 + c - '0';
		return *this;
	}
};

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

const int MOD = 666013;

vector <int> v[MOD];


inline vector < int > ::iterator cauta(int val)
{
	int x = val % MOD;
	vector < int > ::iterator it;
	for (it = v[x].begin(); it != v[x].end(); ++it)
		if (*it == val) return it;
	return v[x].end();
}

inline void adauga(int val)
{
	int x = val % MOD;
	if (cauta(val) == v[x].end()) v[x].push_back(val);
}

inline void sterge(int val)
{
	int x = val % MOD;
	vector <int> ::iterator it = cauta(val);
	if (it != v[x].end()) v[x].erase(it);
}

int n, op, x;


int main()
{
	fin >> n;
	while (n--)
	{
		fin >> op >> x;
		if (op == 1) adauga(x);
		else if (op == 2) sterge(x);
		else fout << (cauta(x) != v[x % MOD].end()) << "\n";
	}
}