Pagini recente » Cod sursa (job #8582) | Cod sursa (job #919762) | Cod sursa (job #800358) | Cod sursa (job #3197854) | Cod sursa (job #831600)
Cod sursa(job #831600)
#include<fstream>
#define nmax 1000000
using namespace std;
bool M[nmax];
unsigned long N;
struct nod{
unsigned long info;
nod *next;
};
struct lista{
nod *p,*u;
};
lista H[nmax];
ifstream f("fis.in");
ofstream g("fis.out");
void insL1(int x){
unsigned long poz=x%N;
H[poz].p=(nod*)malloc(sizeof(H[poz]));
H[poz].p->info=x;
H[poz].p->next=NULL;
H[poz].u=H[poz].p;
}
void insL2(int x){
unsigned long poz=x%N;
nod *q=(nod*)malloc(sizeof(H[poz]));
q->info=x;
H[poz].u->next=q;
q->next=NULL;
H[poz].u=q;
}
void ins(int x){
unsigned long poz=x%N;
if(M[poz]==false){
M[poz]=true;
insL1(x);
}
else
insL2(x);
}
void del1(int x){
unsigned long poz=x%N;
nod *q=H[poz].p;
if(q->info==x){
if(q->next==NULL){
delete q;
M[poz]=false;
}
else{
H[poz].p=H[poz].p->next;
delete q;
}
}
else
while(q->next!=NULL)
if(q->next->info==x){
nod *z=q->next;
q->next=q->next->next;
delete z;
}
else
q=q->next;
}
void del(int x){
unsigned long poz=x%N;
if(M[poz]!=false){
del1(x);
}
}
void search(int x){
unsigned long poz=x%N;
if(M[poz]==false)
g<<0<<'\n';
else{
nod *q=H[poz].p;
while(q!=NULL)
if(q->info==x){
g<<1<<'\n';
break;
}
else
q=q->next;
}
}
void citire(){
unsigned long op,x;
f>>N;
for(unsigned long i=1;i<=N;i++){
f>>op>>x;
if(op==1)
ins(x);
else
if(op==2)
del(x);
else
search(x);
}
}
int main(){
citire();
}