Pagini recente » Rating Istrate Sebastian (IstrateSebastian0102) | Cod sursa (job #1681133) | Cod sursa (job #2262764) | Cod sursa (job #698932) | Cod sursa (job #1754792)
#include<fstream>
using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");
int mod=666013,n,i,a,b;
struct nod{
int inf;
nod *pred,*urm;
}*p[666014],*u[666014];
void adaug(int ind,int val){
nod *q;
if (p[ind]!=0){
q=new nod;
q->inf=val;
q->urm=0;
q->pred=u[ind];
u[ind]->urm=q;
u[ind]=q;
}
else{
q=new nod;
q->inf=val;
q->urm=0;
q->pred=0;
p[ind]=u[ind]=q;
}
}
void elim(nod *r){
nod *w,*q;
w=r->pred;
q=r->urm;
w->urm=q;
q->pred=w;
}
void del(int ind,int val){
nod *q;
if (p[ind]==0 && u[ind]==0) return;
if (p[ind]==u[ind] && p[ind]->inf==val){
p[ind]=u[ind]=0;
return;
}
if (p[ind]->inf==val){
p[ind]=p[ind]->urm;
p[ind]->pred=0;
return;
}
if (u[ind]->inf==val){
u[ind]=u[ind]->pred;
u[ind]->urm=0;
return;
}
q=p[ind];
while(q!=0){
if (q->inf==val) break;
q=q->urm;
}
if (q!=0) elim(q);
}
void add(int ind,int val){
nod *q;
q=p[ind];
while(q!=0){
if (q->inf==val) break;
q=q->urm;
}
if (q==0) adaug(ind,val);
}
int found(int ind,int val){
nod *q;
q=p[ind];
while(q!=0){
if (q->inf==val) return 1;
q=q->urm;
}
return 0;
}
int main(){
fin>>n;
for (i=0;i<=mod-1;i++)
{
p[i]=u[i]=0;
}
for (i=1;i<=n;i++){
fin>>a>>b;
if (a==1) add(b%mod,b);
else
if (a==2) del(b%mod,b);
else
if (a==3) fout<<found(b%mod,b)<<'\n';
}
fin.close();
fout.close();
return 0;
}