Pagini recente » Rating Teofil (teofil) | Concursul National de Soft Grigore Moisil Lugoj | Cod sursa (job #3137074) | Cod sursa (job #3284793) | Cod sursa (job #1842158)
#include<fstream>
#include<unordered_set>
using namespace std;
unordered_set<int> S;
const int Nmax = 200001;
class Heap{
private:
int A[Nmax],K;
int C[Nmax];
int P[Nmax],I;
void rep(int i,int j){
swap(P[C[i]],P[C[j]]);
swap(C[i],C[j]);
swap(A[i],A[j]);
}
void upheap(int i){
if(i/2 && A[i] < A[i/2]){
rep(i/2,i);
upheap(i/2);
}
}
void downheap(int i){
if(2*i+1<=K && A[2*i+1] < A[i] && A[2*i+1]<=A[2*i]){
rep(i,2*i+1);
downheap(2*i+1);
}
else if(2*i<=K && A[2*i] < A[i]){
rep(i,2*i);
downheap(2*i);
}
}
public:
void insert(int x){
A[++K]=x;
P[++I]=K;
C[K]=I;
upheap(K);
}
void rem_ind(int x){
int pos=P[x];
rep(pos,K);
K--;
downheap(pos);
}
int top(){
return A[1];
}
} H;
int n,x,y;
int main(){
freopen("heapuri.in","r",stdin);
freopen("heapuri.out","w",stdout);
scanf("%d",&n);
while(n--){
scanf("%d",&x);
if(x<3) scanf("%d",&y);
if(x==1) H.insert(y);
if(x==2) H.rem_ind(y);
if(x==3) printf("%d\n",H.top());
}
return 0;
}