Pagini recente » Cod sursa (job #1096265) | Cod sursa (job #1349271) | Cod sursa (job #2660596) | Cod sursa (job #1942553) | Cod sursa (job #2189801)
#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 << " ";
break;
}
--ops;
}
return 0;
}