Cod sursa(job #2189802)

Utilizator M1st1cVlad Vaculin M1st1c Data 29 martie 2018 03:13:37
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;

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

//Array in care salvam starea elementului i, true = sters
bool a[200010];

//Functie pentru a compara 2 perechi dupa primul numar,
//facand un min heap
struct compara{
    bool operator()(pair<int, int> x, pair<int, int>y){
        return x.first > y.first;
    }
};

int k; //Salveaza indexul elementelor
int main (){
    int ops;
    int nr;
    fin >> ops;

    //Cream un min heap
    priority_queue <pair<int, int>, vector<pair<int, int> >, compara > pq;
    while(ops){
        int op;
        fin >> op;
        switch(op){
        case 1: // 1 = introducem in heap nr cu indexul k
            fin >> nr;
            pq.push(make_pair(nr, ++k));
            break;
        case 2: //setam indexul nr ca fiind sters
            fin >> nr;
            a[nr] = true;
            break;
        case 3: //Inainte de a afisa radacina heapului,
                //verificam daca nu a fost stearsa prin 2.
                //Daca a fost stearsa o scoatem din heap
            while(a[pq.top().second])
                pq.pop();
            fout << pq.top().first << "\n";
            break;

        }
        --ops;
    }
    return 0;
}