Pagini recente » Cod sursa (job #3362235) | Cod sursa (job #3362228) | Cod sursa (job #3362222) | Cod sursa (job #3363689) | Cod sursa (job #3362586)
#include <fstream>
#include <algorithm>
#define int long long
using namespace std;
ifstream cin ("heapuri.in");
ofstream cout ("heapuri.out");
int v[200005],pos[200005],h[200005];
int h_size=0,insert_cnt=0;
void swap_nodes(int i,int j) {
swap(h[i], h[j]);
pos[h[i]]=i;
pos[h[j]]=j;
}
void up(int i) {
while (i>1 && v[h[i]]<v[h[i/2]]) {
swap_nodes(i,i/2);
i=i/2;
}
}
void down(int i) {
while (2*i<=h_size) {
int son=2*i;
if (son+1<=h_size && v[h[son+1]]<v[h[son]]) {
son=son+1;
}
if (v[h[son]]<v[h[i]]) {
swap_nodes(i,son);
i=son;
} else {
break;
}
}
}
int32_t main() {
int n;
cin>>n;
for (int k=1; k<=n; k++) {
int op;
cin>>op;
if (op==1) {
int x;
cin>>x;
insert_cnt++;
v[insert_cnt]=x;
h_size++;
h[h_size]=insert_cnt;
pos[insert_cnt]=h_size;
up(h_size);
} else if (op==2) {
int x;
cin>>x;
int p=pos[x];
swap_nodes(p,h_size);
h_size--;
if (p<=h_size) {
up(p);
down(p);
}
} else {
cout<<v[h[1]]<<"\n";
}
}
}