Pagini recente » Cod sursa (job #2277319) | Cod sursa (job #1053189) | Cod sursa (job #2229427) | Cod sursa (job #2740031) | Cod sursa (job #2596763)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int q, l, ind;
int heap[200005], pos[200005], opp[200005];
void rise(int i);
void lower(int i);
int main()
{
fin >> q;
while(q--){
int task;
fin >> task;
if(task == 1){
int x;
fin >> x;
heap[++l] = x;
pos[++ind] = l;
opp[l] = ind;
rise(l);
}
else if(task == 2){
int x;
fin >> x;
heap[pos[x]] = INT_MAX;
lower(pos[x]);
}
else{
fout << heap[1] << "\n";
}
}
return 0;
}
void rise(int i){
if(i == 1) return;
if(heap[i] >= heap[i / 2]) return;
swap(pos[opp[i]], pos[opp[i / 2]]);
swap(opp[i], opp[i / 2]);
swap(heap[i], heap[i / 2]);
rise(i / 2);
}
void lower(int i){
if(2 * i > l) return;
else if(2 * i == l && heap[i] <= heap[2 * i]) return;
else if(heap[i] <= min(heap[2 * i], heap[2 * i + 1])) return;
int next;
if(2 * i == l) next = 2 * i;
else next = (heap[2 * i] <= heap[2 * i + 1] ? 2 * i : 2 * i + 1);
swap(pos[opp[i]], pos[opp[next]]);
swap(opp[i], opp[next]);
swap(heap[i], heap[next]);
lower(next);
}