Pagini recente » Cod sursa (job #1683906) | Cod sursa (job #2904098) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #2906043)
#include <fstream>
#include <queue>
using namespace std;
int main() {
priority_queue<int> heap[102];
int Nr_multimi, Nr_op, op, i, a, b;
ifstream finput("mergeheap.in");
ofstream foutput("mergeheap.out");
finput >> Nr_multimi >> Nr_op;
for(i = 1; i <= Nr_op; ++i){
finput >> op;
switch(op){
// operatie de inserare in multimea a
case 1:{
finput >> a >> b;
heap[a].push(b);
break;
}
// elem maxim (top) cu eliminarea sa (pop)
case 2:{
finput >> a;
foutput << heap[a].top() << "\n";
heap[a].pop();
break;
}
// reuniune multimi, aleg cine este a si b in functie de size
// p cu sensul de a face cat mai putine push-uri :)
case 3:{
finput >> a >> b;
if(heap[b].size() > heap[a].size()){
swap(heap[a], heap[b]);
}
while(!heap[b].empty()){
// pun elem din b in a, varf cu varf
heap[a].push(heap[b].top());
// pana cand b-ul devine vida
heap[b].pop();
}
}
}
}
return 0;
}