Pagini recente » Cod sursa (job #2368836) | Cod sursa (job #166973) | Cod sursa (job #2142730) | Cod sursa (job #2947801) | Cod sursa (job #2766204)
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
int A[200001], Heap[200001], Pos[200001], heapsize=0, insrt=0;
void heapify(int i) {
int smallest = i, l = 2*i, r=2*i+1;
if(l<=heapsize && A[Heap[l]]<A[Heap[smallest]]) smallest = l;
if(r<=heapsize && A[Heap[r]]<A[Heap[smallest]]) smallest = r;
if(smallest!=i) {
swap(Heap[smallest], Heap[i]);
Pos[Heap[i]] = i;
Pos[Heap[smallest]] = smallest;
heapify(smallest);
}
}
void push(int x) {
A[++insrt] = x;
Heap[++heapsize] = insrt;
int i = heapsize;
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 = i/2;
}
}
void pop(int x) {
int idx = Pos[x];
swap(Heap[idx], Heap[heapsize]);
Pos[Heap[idx]] = idx;
Pos[Heap[heapsize]] = heapsize;
heapsize--;
heapify(idx);
}
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);
push(x);
}
if(nr == 2) {
int x;
scanf("%d ", &x);
pop(x);
}
if(nr == 3) {
printf("%d\n", A[Heap[1]]);
}
}
return 0;
}