Pagini recente » Cod sursa (job #1716422) | Cod sursa (job #1261397) | Cod sursa (job #2761166) | Cod sursa (job #1274500) | Cod sursa (job #1968603)
#include <stdint.h>
#include <fstream>
#define nmax 1000001
#define pmax 666013
using namespace std;
fstream f1("hashuri.in", ios::in);
fstream f2("hashuri.out", ios::out);
int32_t n;
const int32_t pr=666013;
struct nod
{
nod *urm;
int32_t val;
} *t[pmax];///creare vector de inceputuri de liste
/*int32_t h(int32_t x)
{
return x%p;
}*/
void add(int32_t x)///adaugi val x in fata listei coresp
{
nod *p= new nod;
p->val=x;
p->urm=t[x%pr];
t[x%pr]=p;
}
int32_t search_h(int32_t x)
{
nod *p;
for(p=t[x%pr]; p!=0; p=p->urm)
if(p->val==x) return 1;
return 0;
}
void delete_h(int32_t x)
{
nod *p, *q;
int32_t aux;
for(p=t[x%pr]; (p!=0)&&(p->val!=x); p=p->urm);
if(p!=0) ///daca ai ce sterge
{
///interschimbi inf din p cu cea din p->urm
///si stergi nodul p->urm
if(p->urm==0)
{
p->val=0;
}
else
{
aux=p->val;
p->val=p->urm->val;
p->urm->val=aux;
q=p->urm;
p->urm=p->urm->urm;
delete q;
}
}
}
int main()
{
int32_t i, x;
int16_t val;
f1>>n;
for(i=1; i<=n; i++)
{
f1>>val>>x;
if(val==1) {if(!search_h(x)) add(x);}////adaugi x la lista t[h[x]] daca nu era deja
else if(val==2) delete_h(x);///sterge x daca exista
else if(val==3) f2<<search_h(x)<<"\n";///afis 1 daca x este in multime
}
return 0;
}