Cod sursa(job #3187850)

Utilizator vvvvvvvvvvvvvVusc David vvvvvvvvvvvvv Data 30 decembrie 2023 19:22:04
Problema Heapuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <fstream>

using namespace std;

ifstream fin("heapuri.in");
ofstream fout("heapuri.out");

int heap[200001], n, s, ind[200001];

int main(){
    fin >> n;
    for(int i = 1; i <= n; i++){
        int c, x;
        fin >> c;
        if(c == 1){
            fin >> heap[s];
            int son = s, dad = (son - 1) / 2;
            ind[i] = son;
            while (dad >= 0 && heap[dad] > heap[son])
            {
                swap(heap[dad], heap[son]);
                ind[i] = dad;
                son = dad;
                dad = (son - 1) / 2; 
            }
            s++;
        }
        if(c == 2){
            fin >> x;
            swap(heap[s - 1], heap[ind[x]]);
            s--;
            int rightChild = 2 * ind[x] + 2, leftChild = rightChild - 1, i = ind[x];
            while (leftChild < s)
            {
                int smallestChild = leftChild;
                if(rightChild < s && heap[rightChild] < heap[leftChild]) smallestChild = rightChild;

                if(heap[i] < heap[smallestChild]) break;
                else swap(heap[i], heap[smallestChild]);

                i = smallestChild;
                rightChild = 2 * i + 2, leftChild = rightChild - 1;
            }
        }
        if(c == 3) fout << heap[0] << '\n';
    }
    fin.close();
    fout.close();
    return 0;
}