Pagini recente » Cod sursa (job #2601845) | Cod sursa (job #1629648) | Cod sursa (job #2002864) | Cod sursa (job #1387848) | Cod sursa (job #2081138)
#include <fstream>
#define DIM 200005
using namespace std;
int N;
int nr;
int hcnt;
int H[DIM];
int poz[DIM];
int A[DIM];
int op;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
void up(int x){
int c=x;
int p=x/2;
while(p>=1 && A[H[c]] < A[H[p]]){
swap(H[c],H[p]);
swap(poz[H[c]],poz[H[p]]);
c=p;
p/=2;
}
}
void down(int x){
int p=x,c=2*p;
while(c<=hcnt){
if(c+1<=hcnt && A[H[c+1]] < A[H[c]])
c++;
if(A[H[p]] > A[H[c]]){
swap(H[p],H[c]);
swap(poz[H[p]],poz[H[c]]);
p=c;
c*=2;
}
else
break;
}
}
void insert(){
fin>>A[++nr];
H[++hcnt]=nr;
poz[H[hcnt]]=hcnt;
up(hcnt);
}
void kick(){
int x;
fin >> x;
A[x]=-1;
up(poz[x]);
swap(H[1],H[hcnt]);
swap(poz[H[1]],poz[H[hcnt]]);
hcnt --;
down(poz[H[1]]);
}
int main(){
fin >> N;
while(N--){
fin >> op;
if(op==1)
insert();
if(op==2)
kick();
if(op==3)
fout << A[H[1]] << "\n";
}
}