Pagini recente » Cod sursa (job #126404) | Cod sursa (job #2583452) | Cod sursa (job #2860587) | Cod sursa (job #1452160) | Cod sursa (job #730333)
Cod sursa(job #730333)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("hashuri.in");
ofstream g("hashuri.out");
struct lista{
int numar;
lista* next;
};
lista *prim[199993];
void adauga(long x){
int i = x%199993;
if (prim[i] == NULL){
prim[i] = new lista;
prim[i]->numar = x;
prim[i]->next = NULL;
}
else{
lista *l;
l = new lista;
l->next = prim[i];
l->numar = x;
prim[i] = l;
}
}
void sterge(long x){
int i = x%199993;
if(prim[i]!=NULL){
if(prim[i]->numar==x){
if(prim[i]->next!=NULL){
lista *p=prim[i];
prim[i]=prim[i]->next;
delete p;
return;
}
else{
delete prim[i];
prim[i] = NULL;
return;
}
}
else
if(prim[i]->next!=NULL){
lista* n = prim[i];
while(n->next!=NULL){//merge pana la penultimul
if(n->next->numar == x){//am gasit numarul
lista* p = n->next;
n->next=n->next->next;
delete p;
return;
}
if(n->next->next==NULL){//x - penultimul element
if(n->next->numar == x){
delete n->next;
n->next=NULL;
}
}
n=n->next;
}
}
}
}
int returneaza(long x){
int i = x%199993;
if (prim[i] == NULL)
return 0;
else{
lista *l;
l = prim[i];
if(prim[i]->numar == x){
return 1;
}
while(l->next != NULL){
if (l->numar == x)
return 1;
else
l = l->next;
}
if(l->numar == x)
return 1;
return 0;
}
}
int main(){
int n;
int op;
prim[20000] = {NULL};
long x;
f >> n;
for(int i = 0; i < n; i++)
{
f >> op;
f >> x;
if(op == 1)
adauga(x);
else if(op == 2)
sterge(x);
else
g << returneaza(x) << "\n";
}
f.close();
g.close();
return 0;
}