Pagini recente » Istoria paginii utilizator/sasteve | Istoria paginii utilizator/bulintis | Istoria paginii utilizator/keylos | Cod sursa (job #3362395) | Cod sursa (job #3361236)
#include <bits/stdc++.h>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int N = 200000;
priority_queue<pair<int,int>> pq;
bitset<N> elim;
int op,tip,val,poz;
int main()
{
f>>op;
for(int i=1;i<=op;i++)
{
f>>tip;
if(tip==1)
{
f>>val;
poz++;/// determin la ce pozitie a intrat aceasta valoare
/// in coada de priotitati adaug -valoarea si pozitia
pq.push({-val,poz});
}
else if(tip==2)
{
f>>poz;
/// memorez ca trebuie sa elimin valoarea de la pozitia poz
elim[poz]=1;
/// fac eliminarea mai tarziu
}
else
{
/// am de gasit minimul
/// cat timp pozitia elementului din top este eliminata
/// se elimina ce am in varf
while(elim[pq.top().second])
pq.pop();
g<<-pq.top().first<<'\n';/// pentru elementul din varf afisez valoare cu -
}
}
return 0;
}