Pagini recente » Cod sursa (job #3192024) | Cod sursa (job #1318649) | Cod sursa (job #1240841) | Cod sursa (job #2562617) | Cod sursa (job #2743693)
#include <cstdio>
#include <iostream>
using namespace std;
struct node {
int x;
node* kid;
node* nxt;
node() {
x = 0;
kid = 0;
nxt = 0;
}
};
node* root[123];
node* nothing;
node* join(node* a, node* b) {
if (!a) {
return b;
}
if (!b) {
return a;
}
if (a->x < b->x) {
swap(a, b);
}
b->nxt = a->kid;
a->kid = b;
return a;
}
node* tupac(node* a) {
if (!a) {
return a;
}
if (!a->nxt) {
return a;
}
return join(join(a, a->nxt), tupac(a->nxt->nxt));
}
node* del(node* a) {
return tupac(a->kid);
}
node* ins(node* a, int x) {
node* b = new node;
b->x = x;
return join(a, b);
}
int main() {
freopen ("mergeheap.in", "r", stdin);
freopen ("mergeheap.out", "w", stdout);
int n, q;
scanf("%d %d", &n, &q);
while (q--) {
int tp;
scanf("%d", &tp);
if (tp == 1) {
int i, x;
scanf("%d %d", &i, &x);
root[i] = ins(root[i], x);
}
if (tp == 2) {
int i;
scanf("%d", &i);
printf("%d\n", root[i]->x);
root[i] = del(root[i]);
}
if (tp == 3) {
int i, j;
scanf("%d %d", &i, &j);
root[i] = join(root[i], root[j]);
root[j] = nothing;
}
}
}