Pagini recente » Cod sursa (job #764361) | Cod sursa (job #525915) | Cod sursa (job #2439088) | Cod sursa (job #1347467) | Cod sursa (job #2465318)
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
const int NMAX = 2e5 + 5;
int Q, N, Type, cnt;
pair <int, int > Heap[NMAX];
bool Sel[NMAX];
static inline void Heap_Up (int pos)
{
if(pos == 1)
return;
int T = pos / 2;
if(Heap[pos].first < Heap[T].first)
{
swap(Heap[pos], Heap[T]);
Heap_Up(T);
}
return;
}
static inline void Heap_Down (int pos, int N)
{
int Left = 1e9 + 1, Right = 1e9 + 1;
if(2 * pos <= N)
Left = Heap[2 * pos].first;
if(2 * pos + 1 <= N)
Right = Heap[2 * pos + 1].first;
if(Heap[pos].first < min(Left, Right))
return;
if(Left == min(Left, Right))
{
swap(Heap[pos], Heap[2 * pos]);
Heap_Down(2 * pos, N);
return;
}
swap(Heap[pos], Heap[2 * pos + 1]);
Heap_Down(2 * pos + 1, N);
return;
}
int main()
{
f.tie(NULL);
f >> Q;
for(int i = 1; i <= Q; ++i)
{
f >> Type;
if(Type == 1)
{
int X = 0;
f >> X;
++N;
Heap[N] = {X, ++cnt};
Heap_Up(N);
}
else
{
if(Type == 2)
{
int X = 0;
f >> X;
Sel[X] = true;
}
else
{
while(Sel[Heap[1].second] == true)
{
swap(Heap[1], Heap[N]);
Heap[N].first = 1e9 + 1;
Heap_Down(1, N);
--N;
}
g << Heap[1].first << '\n';
}
}
}
return 0;
}