Pagini recente » Cod sursa (job #2359682) | Cod sursa (job #1902282) | Cod sursa (job #429397) | Cod sursa (job #895169) | Cod sursa (job #1966628)
#include <iostream>
#include <fstream>
#define v first
#define ord second
#define N 200005
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
int n, nr, ind, p[N];
pair<int,int> h[N];
void up(int i){
while(i/2&&h[i/2].v>h[i].v){
swap(h[i/2], h[i]);
swap(p[h[i/2].ord], p[h[i].ord]);
i/=2;
}
}
void down(int i){
int j;
while(2*i<=nr){
if(2*i+1<=nr){
j=(h[2*i].v<h[2*i+1].v?0:1)+2*i;
swap(h[i], h[j]);
swap(p[h[i].ord], p[h[j].ord]);
i=j;
}else{
if(h[i].v>h[2*i].v){
swap(h[i], h[2*i]);
swap(p[h[i].ord], p[h[2*i].ord]);
i*=2;
}else{
break;
}
}
}
}
void add(int x){
nr++;
ind++;
h[nr].v=x;
h[nr].ord=ind;
p[ind]=nr;
up(nr);
}
void del(int x){
int i=p[x], j;
swap(h[i], h[nr]);
swap(p[h[i].ord], p[h[nr].ord]);
nr--;
up(i);
down(i);
}
/*
void print_heap(){
int p=1, i=1, p2;
while(i<=nr){
p2=p;
while(p&&i<=nr){
cout<<h[i].v<<" ";
p--;
i++;
}
p=p2<<1;
cout<<"\n";
}
}
*/
int main(){
in>>n;
int x, y;
for(int i=1; i<=n; i++){
in>>x;
if(x==3){
out<<h[1].v<<"\n";
}else{
in>>y;
if(x==1)add(y);
else del(y);
}
}
return 0;
}