Pagini recente » Cod sursa (job #1982052) | Cod sursa (job #233800) | Cod sursa (job #95968) | Cod sursa (job #1376054) | Cod sursa (job #3131040)
#include <iostream>
#include <vector>
#include <fstream>
#include <climits>
std::ifstream fin("hashuri.in");
std::ofstream fout("hashuri.out");
class Hash {
static const int prime = 666013;
int *hash;
public:
Hash() {
hash = new int[prime];
}
~Hash() {
delete[] hash;
}
void inserare(int i) {
int n = i % prime;
if (hash[n] < 0 || hash[n] == INT_MAX)
hash[n] = i;
else {
int j = n + 1;
if (j > prime - 1)
j %= prime;
while (j != n) {
if (hash[j] < 0 || hash[j] == INT_MAX) {
hash[j] = i;
break;
}
++j;
if (j > prime - 1)
j %= prime;
}
}
}
void stergere(int i) {
int n = i % prime;
if (hash[n] == i)
hash[n] = INT_MAX;
else {
int j = n + 1;
if (j > prime - 1)
j %= prime;
while (j != n) {
if (hash[j] == i) {
hash[j] = INT_MAX;
break;
}
++j;
if (j > prime - 1)
j %= prime;
}
}
}
bool cautare(int i){
int n = i % prime;
if (hash[n] == i)
return true;
else {
int j = n + 1;
if (j > prime - 1)
j %= prime;
while (j != n) {
if (hash[j] == i)
return true;
++j;
if (j > prime - 1)
j %= prime;
}
}
return false;
}
};
int main()
{
int n;
fin >> n;
Hash h;
for (int i = 0;i < n;++i)
{
int a, b;
fin >> a >> b;
switch (a)
{case 1:
{
h.inserare(b);
break;
}
case 2:
{
h.stergere(b);
break;
}
case 3:
{
if (h.cautare(b))
fout << "1\n";
else {
fout << "0\n";
}
break;
}
default:
break;
}
}
return 0;
}