Pagini recente » Cod sursa (job #2950023) | Cod sursa (job #809810) | Cod sursa (job #1969233) | Clasamentul arhivei de probleme | Cod sursa (job #2894266)
#include <iostream>
#include <fstream>
#include <vector>
#define N 666013
using namespace std;
vector<int> hashul_nebun[N];
inline vector<int>::iterator find_value(int x)
{
int clasa_find = x % N;
vector<int>::iterator it;
for (it = hashul_nebun[clasa_find].begin(); it != hashul_nebun[clasa_find].end(); it++)
// dereferentiez astfel incat sa preiau valoarea de la acea adresa
if (*it == x)
return it;
return hashul_nebun[clasa_find].end();
}
inline void add_value(int x)
{
int clasa_add = x % N;
// daca nu gasesc val pana la finald e hash atunci il adaug
if (find_value(x) == hashul_nebun[clasa_add].end())
hashul_nebun[clasa_add].push_back(x);
}
inline void delete_value(int x)
{
int clasa_del = x % N;
// iteratorul valorii x este preluat si este cautat valoarea
vector<int>::iterator it = find_value(x);
// daca este gasita valoarea, deci se ajunge la finalul hashului cu o val existenta atunci o sterg
if (it != hashul_nebun[clasa_del].end())
hashul_nebun[clasa_del].erase(it); // mergea si cu pop daca il mutam la final cu swap
}
int main()
{
int n, op, x;
ifstream input("hashuri.in");
ofstream output("hashuri.out");
input >> n;
for(int i = 1; i <= n; i++)
{
input >> op >> x;
if(op == 1)
{
add_value(x);
continue;
}
else if(op == 2)
{
delete_value(x);
continue;
}
else if(op == 3)
{
int found=0;
// daca este gasita valoarea atunci imi iau un flag de found pe care il si afisez
if(find_value(x)!=hashul_nebun[x%N].end())
found=1;
output << found<< endl;
}
}
return 0;
}