Cod sursa(job #2906043)

Utilizator AncaGAncuta Gava AncaG Data 24 mai 2022 21:24:15
Problema Heapuri cu reuniune Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#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;
}