Pagini recente » Cod sursa (job #1730176) | Cod sursa (job #1421425) | Cod sursa (job #3159192) | Cod sursa (job #470964) | Cod sursa (job #3131044)
#include <iostream>
#include <vector>
#include <fstream>
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] = i;
else {
int j = n + 1;
if (j > prime - 1)
j %= prime;
while (j != n) {
if (hash[j] < 0) {
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] = -1;
else {
int j = n + 1;
if (j > prime - 1)
j %= prime;
while (j != n) {
if (hash[j] == i) {
hash[j] = -1;
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" << std::endl;
else {
fout << "0" << std::endl;
}
break;
}
default:
break;
}
}
return 0;
}