Pagini recente » Cod sursa (job #2497346) | Cod sursa (job #1674857) | Cod sursa (job #2630190) | Cod sursa (job #53651) | Cod sursa (job #2942595)
#include <fstream>
#include <map>
#include <vector>
#define MODULO 250000
using namespace std;
class HashMap {
private:
vector<int> hash_map[MODULO];
public:
int get_key(int value) {
return value % MODULO;
}
bool key_exists(int key) {
return hash_map[key].size() != 0;
}
int get_nr_mapped_values(int key) {
return hash_map[key].size();
}
void insert_element(int number) {
if (find_element(number).first) {
return;
}
int key = get_key(number);
hash_map[key].push_back(number);
}
void delete_element(int number) {
pair<int, int> element_information = find_element(number);
if (element_information.first) {
int key = get_key(number);
hash_map[key].erase(hash_map[key].begin() + element_information.second);
}
}
/*
* Returns 1 if element is found, 0 otherwise.
* If the element is found, then the position of the element is also returned, otherwise -1 is returned;
*/
pair<int, int> find_element(int number) {
int key = get_key(number);
if (key_exists(key)) {
int nr_mapped_values = get_nr_mapped_values(key);
for (int i = 0; i < nr_mapped_values; ++i) {
if (hash_map[key][i] == number) {
return { 1, i };
}
}
}
return { 0, -1 };
}
};
HashMap hash_map;
int main() {
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
int nr_operations, operation_type, number;
fin >> nr_operations;
for (int i = 0; i < nr_operations; ++i) {
fin >> operation_type >> number;
if (operation_type == 1) {
hash_map.insert_element(number);
} else if (operation_type == 2) {
hash_map.delete_element(number);
} else {
fout << hash_map.find_element(number).first << '\n';
}
}
return 0;
}