Pagini recente » Cod sursa (job #358541) | Cod sursa (job #495339) | Cod sursa (job #2395050) | Cod sursa (job #1419790) | Cod sursa (job #2768965)
#include<iostream>
#include<fstream>
using namespace std;
ifstream in("mergeheap.in");
ofstream out("mergeheap.out");
struct N {
int v;
N *t,*i,*r;
};
N *W(int v)
{
N *t=new N;
t->i=t->r=NULL;
t->v=v,t->r=t->i=NULL;
return t;
}
N *M(N *a,N *b)
{
if(!a)
return b;
if(!b)
return a;
if(b->v>a->v)
swap(a,b);
if(!a->i) {
a->i=b;
return a;
} else {
b->r=a->i,a->i=b;
return a;
}
return NULL;
}
N *I(int v,N *h)
{
N *t=W(v);
h=M(t,h);
return h;
}
N *S(N *h)
{
if(!h||!h->r)
return h;
else {
N *c,*d,*e;
c=h,d=h->r,e=h->r->r,c->r=d->r=NULL;
return M(M(c,d),S(e));
}
return NULL;
}
N *D(N *h)
{
out<<h->v<<"\n";
return S(h->i);
}
int n,m,o,a,b;
N *u[105];
int main()
{
in>>n>>m;
while(m--) {
in>>o;
if(o==1)
in>>a>>b,u[a]=I(b,u[a]);
else if(o==2)
in>>a,u[a]=D(u[a]);
else
in>>a>>b,u[a]=M(u[a],u[b]),u[b]=NULL;
}
}