Cod sursa(job #3318296)

Utilizator ZsomborZsombor Horvay Zsombor Data 27 octombrie 2025 21:03:14
Problema Heapuri Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>
#include <vector>
#include <utility>
#include <climits>

using namespace std;

ifstream be("heapuri.in");
ofstream ki("heapuri.out");

int main()
{
    int n;
    be >> n;

    int t, x;

    vector<pair<int, int>> h;
    vector<int> order;


    for(int i = 0; i < n; i++)
    {
        be >> t;

        if(t == 1)
        {
            be >> x;
            h.push_back({x, h.size()});
            order.push_back(h.size() - 1);

            int current = h.size() - 1;

            while(current > 0)
            {
                int k = (current - 1) / 2;

                if(h[k] > h[current])
                {
                    swap(h[k], h[current]);
                    swap(order[h[k].second], order[h[current].second]);
                }

                current = k;
                k = (k - 1) / 2;
            }

        }else if(t == 2)
        {
            be >> x;
            x--;
            
            int current = order[x];

            h[current] = h.back();
            order[h.back().second] = current;
            h.pop_back();

            while(2 * current + 1 <= (int)h.size() - 1)
            {
                int c1 = 2 * current + 1;
                int c2 = INT_MAX;

                if(2 * current + 2 <= (int)h.size() - 1)
                {
                    c2 = 2 * current + 2;
                }

                int minimum = min(c1, c2);

                swap(h[current], h[minimum]);
                swap(order[h[current].second], order[h[minimum].second]);

                current = minimum;
            }
        }else
        {
            ki << h[0].first << "\n";
        }
    }

    return 0;
}