Pagini recente » Cod sursa (job #680515) | Cod sursa (job #1492081) | Cod sursa (job #890982) | Cod sursa (job #592420) | Cod sursa (job #3131388)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define dim 666013
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
struct Nod {
int k,v;
Nod* next;
Nod(int k,int c):k(k),v(c),next(nullptr){}
};
class Hash {
private:
vector<Nod*> t;
static int hash(int key){
return key%dim;
}
public:
Hash() {
t.resize(dim, nullptr);
}
void insert(int val) {
int index=hash(val);
Nod* newNod=new Nod(val, 1);
if (t[index]==nullptr) {
t[index]=newNod;
}
else {
Nod* curr=t[index];
while (curr->next!=nullptr) {
if (curr->k==val) {
curr->v++;
delete newNod;
return;
}
curr=curr->next;
}
if (curr->k==val) {
curr->v++;
delete newNod;
return;
}
curr->next=newNod;
}
}
void remove(int val) {
int index=hash(val);
if (t[index]==nullptr) {
return;
}
Nod* curr=t[index];
Nod* prev=nullptr;
while (curr!=nullptr){
if (curr->k==val){
curr->v--;
if (curr->v==0) {
if (prev!=nullptr) {
prev->next=curr->next;
} else {
t[index]=curr->next;
}
delete curr;
}
return;
}
prev=curr;
curr=curr->next;
}
}
bool getval(int val) {
int index=hash(val);
Nod* curr=t[index];
while (curr!=nullptr) {
if (curr->k==val) {
return true;
}
curr=curr->next;
}
return false;
}
};
int main() {
Hash h;
int n,op,x;
fin>>n;
for(int i=0;i<n;i++){
fin>>op>>x;
switch(op){
case 1:
h.insert(x);
break;
case 2:
h.remove(x);
break;
case 3:
fout<<h.getval(x)<<"\n";
break;
default:
break;
}
}
return 0;
}