Pagini recente » Cod sursa (job #1116982) | Cod sursa (job #346157) | Cod sursa (job #2754994) | Cod sursa (job #1751564) | Cod sursa (job #1604101)
#include <stdio.h>
#include <algorithm>
using namespace std;
int heap[200001], poz[200001], n;
void push(int x) {
n++;
heap[n]=x;
int i = n;
while(i > 1 && heap[i] < heap[i/2]) {
swap(heap[i],heap[i/2]);
swap(poz[n],poz[i/2]);
i /= 2;
}
}
void pop(int i) {
int x = heap[i];
while(i*2 <= n) {
if(heap[i*2+1] == 0) {
heap[i] = heap[i*2];
i *= 2;
}
else {
heap[i] = heap[i*2] <= heap[i*2+1] ? heap[i*2] : heap[i*2+1];
i = heap[i*2] <= heap[i*2+1] ? i*2 : i*2+1;
}
}
}
int main()
{
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
int k, cod, i, p, x;
scanf("%d",&k);
n=0;
for(i=1, p=0;i<=k;i++) {
scanf("%d",&cod);
if(cod == 1) {
scanf("%d",&x);
p++;
poz[p]=p;
push(x);
}
if(cod == 2) {
scanf("%d",&x);
pop(poz[x]);
}
if(cod == 3) {
printf("%d\n",heap[1]);
}
}
return 0;
}