Pagini recente » Cod sursa (job #3270375) | Cod sursa (job #270634) | Cod sursa (job #1190200) | Cod sursa (job #489280) | Cod sursa (job #2766287)
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int A[200001], Heap[200001], Pos[200001], heapsize=0, insrt=0;
void push(int i) {
while(i>1 && A[Heap[i]]<A[Heap[i/2]]) {
swap(Heap[i], Heap[i/2]);
Pos[Heap[i]] = i;
Pos[Heap[i/2]] = i/2;
i/=2;
}
}
void pop(int i) {
int smallest = i;
do {
i = smallest;
int l=2*i, r=2*i+1;
if(l<=insrt && A[Heap[smallest]]>A[Heap[l]]) smallest = l;
if(r<=insrt && A[Heap[smallest]]>A[Heap[r]]) smallest = r;
swap(Heap[i], Heap[smallest]);
Pos[Heap[i]] = i;
Pos[Heap[smallest]] = smallest;
}while(smallest != i);
}
int main() {
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int n;
scanf("%d", &n);
while(n--) {
int nr;
scanf("%d", &nr);
if(nr == 1) {
int x;
scanf("%d", &x);
A[++insrt] = x;
Heap[insrt] = insrt;
Pos[insrt] = insrt;
push(insrt);
}
if(nr == 2) {
int x;
scanf("%d", &x);
int i = Pos[x];
A[x] = 1e9+1;
pop(i);
}
if(nr == 3) {
printf("%d\n", A[Heap[1]]);
}
}
return 0;
}