Pagini recente » Cod sursa (job #2212875) | Cod sursa (job #1530232) | Cod sursa (job #473197) | Cod sursa (job #1773573) | Cod sursa (job #1839112)
//Hashuri
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
#define MOD 666013
struct node {
int key;
node *next;
};
typedef struct node* List;
vector <List> Map;
int N;
int f(int x) {
return x%MOD;
}
void Insert(int x) {
int val = f(x); //aplic functia de dispersie
List p = new node; //nod nou
p->key = x; //introduc elementul in lista corespunzatoare
p->next = Map[val];
Map[val] = p;
}
void Erase(int x) {
int val = f(x);
List p = Map[val]; //lista corespunzatoare
if(p == NULL)
return; //nu am ce sa sterg
if(p->key == x) { //l-am gasit
Map[val] = p->next;
delete p; //l-am sters
}
else { //il caut in lista
List q = p->next;
while(q != NULL && q->key != x) {
q = q->next;
p = p->next; //ma mut la dreapta
}
if(q != NULL) {
p->next = q->next;
delete q; //sterg
}
}
}
int Search(int x) {
int val = f(x);
List p = Map[val];
while(p != NULL && p->key != x) {
p = p->next;
}
if(p != NULL) //am gasit
return 1;
return 0; //nu am gasit
}
int main()
{
int op, x;
fin>>N;
Map.resize(MOD);
for(int i = 1 ; i <= N ; i++) {
fin>>op>>x;
switch(op) {
case 1 : Insert(x); break; //inserare
case 2 : Erase(x); break; //stergere
case 3 : fout<<Search(x)<<"\n"; break;
default : break;
}
}
fin.close();
fout.close();
return 0;
}