Pagini recente » Cod sursa (job #3183543) | Cod sursa (job #3253054) | Cod sursa (job #3286919) | Cod sursa (job #3286857) | Cod sursa (job #3252843)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
const int MAXN = 200005;
struct hp {
int val, ord;
}heap[MAXN];
int poz[MAXN];
int m, n;
void up(int p)
{
while(p/2 > 0 && heap[p].val < heap[p/2].val)
{
swap(poz[heap[p].ord],poz[heap[p/2].ord]);
swap(heap[p], heap[p/2]);
p /= 2;
}
}
void down(int p)
{
while(p*2 <= n && heap[p].val > max(heap[p*2].val, heap[p*2+1].val))
{
int t = p*2;
if(heap[t].val > heap[t+1].val && t+1 <= n)
t++;
swap(poz[heap[p].ord], poz[heap[t].ord]);
swap(heap[p], heap[t]);
p = t;
}
}
void Adauga(int x, int i)
{
n++;
poz[i] = i;
heap[n].val = x;
heap[n].ord = i;
up(n);
}
void Sterge(int p)
{
swap(poz[heap[p].ord], poz[heap[n].ord]);
swap(heap[p], heap[n]);
n--;
up(p);
down(p);
}
int main()
{
fin >> m;
int ord = 0;
for(int i = 1; i <= m; i++)
{
int op, x;
fin >> op;
if(op == 1)
{
fin >> x;
ord ++;
Adauga(x, ord);
}
else if(op == 2)
{
fin >> x;
int ind = poz[x];
Sterge(ind);
}
else
fout << heap[1].val << "\n";
}
return 0;
}