Pagini recente » Cod sursa (job #1429455) | Cod sursa (job #2873304) | Cod sursa (job #3250297) | Cod sursa (job #3273671) | Cod sursa (job #2744601)
#include <bits/stdc++.h>
using namespace std;
ifstream in("mergeheap.in");
ofstream out("mergeheap.out");
vector<int> heap[101];
void urca(int nr_heap, int poz)
{
while(poz)
{
int tata = (poz-1)/2;
if(heap[nr_heap][tata] < heap[nr_heap][poz])
{
swap(heap[nr_heap][tata], heap[nr_heap][poz]);
poz = tata;
}
else{
break;
}
}
}
void coboara(int nr_heap, int poz)
{
if(poz*2+1 >= (int)heap[nr_heap].size())
return;
int fiu_st = heap[nr_heap][poz*2+1];
int fiu_dr = heap[nr_heap][poz*2+2];
if((poz*2+2 == (int)heap[nr_heap].size()) || fiu_st > fiu_dr)
{
if(fiu_st > heap[nr_heap][poz])
{
swap(heap[nr_heap][poz], heap[nr_heap][poz*2+1]);
coboara(nr_heap, poz*2+1);
return;
}
else{
return;
}
}
else
{
if(fiu_dr > heap[nr_heap][poz])
{
swap(heap[nr_heap][poz], heap[nr_heap][poz*2+2]);
coboara(nr_heap, poz*2+2);
return;
}
else{
return;
}
}
}
void insert_heap(int nr_heap, int x)
{
heap[nr_heap].push_back(x);
urca(nr_heap, heap[nr_heap].size()-1);
}
void pop(int nr_heap)
{
if(heap[nr_heap].size()==0)
return;
out<<heap[nr_heap][0]<<'\n';
heap[nr_heap][0] = heap[nr_heap][heap[nr_heap].size()-1];
heap[nr_heap].pop_back();
coboara(nr_heap, 0);
return;
}
void operatie1()
{
int nr_heap, nr;
in>>nr_heap>>nr;
insert_heap(nr_heap, nr);
}
void operatie2()
{
int nr_heap;
in>>nr_heap;
pop(nr_heap);
}
void operatie3()
{
int a, b;
in>>a>>b;
for(int i=0; i<(int)heap[b].size(); i++)
{
insert_heap(a, heap[b][i]);
}
heap[b].clear();
}
int main()
{
int n,q;
in>>n>>q;
for(int i=0; i<q; i++)
{
int tip_op;
in>>tip_op;
switch(tip_op)
{
case 1:
{
operatie1();
break;
}
case 2:
{
operatie2();
break;
}
case 3:
{
operatie3();
break;
}
default:
break;
}
}
return 0;
}