Pagini recente » Cod sursa (job #2936586) | Cod sursa (job #237803) | Cod sursa (job #1299011) | Cod sursa (job #1342755) | Cod sursa (job #1613998)
#include <fstream>
#define DIM 200005
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int N,nr,a,b,M;
int H[DIM],poz[DIM],A[DIM];
void up(int x){
int c=x,p=x/2;
while(p>=1 && A[H[c]] < A[H[p]]){
swap(H[c],H[p]);
swap(poz[H[p]],poz[H[c]]);
c=p;
p/=2;
}
}
void down(int x){
int p=x,c=2*p;
while(c<=nr){
if(c+1<=nr && A[H[c+1]] < A[H[c]])
c++;
if(A[H[c]] < A[H[p]]){
swap(H[c],H[p]);
swap(poz[H[c]],poz[H[p]]);
p=c;
c*=2;
}
else
break;
}
}
void insert(int x){
H[++nr]=x;
poz[x]=nr;
up(nr);
}
void extract(int x){
A[x]=-1;
up(poz[x]);
swap(H[1],H[nr]);
poz[H[1]]=1;
nr--;
down(1);
}
int main(){
fin >> N;
while(N--){
fin >> a;
if(a==1){
fin >> A[++M];
insert(M);
continue;
}
if(a==2){
fin >> b;
extract(b);
continue;
}
fout << A[H[1]] << "\n";
}
fin.close();fout.close();
return 0;
}