the twelfth day - heap_sort
重铸华农荣光 我辈义不容辞
the twelfth day - heap_sort - fucking difficult
#include<iostream>
using namespace std;
const int N=100010;
int h[N],ph[N],hp[N],size1;
void heap_sort(int a,int b)
{
swap(ph[hp[a]],ph[hp[b]]);
swap(hp[a],hp[b]);
swap(h[a],h[b]);
}
void up(int u)
{
while(u/2&&h[u/2]>h[u])
{
heap_sort(u/2,u);
u=u/2;
}
}
void down(int u)
{
int t=u;
if(2*u<=size1&&h[2*u]<h[t]) t=2*u;
if(2*u+1<=size1&&h[2*u+1]<h[t]) t=2*u+1;
if(t!=u){
heap_sort(u,t);
down(t);
}
}
int main()
{
int n,m=0;
cin>>n;
while(n--){
char op[5];
cin>>op;
if(op[0]=='I'){
int x;
cin>>x;
m++;
h[++size1]=x;
ph[m]=size1;
hp[size1]=m;
up(size1);
}
else if(op[0]=='P'&&op[1]=='M'){
cout<<h[1]<<endl;
}
else if(op[0]=='D'&&op[1]=='M'){
heap_sort(1,size1--);
down(1);
}
else if(op[0]=='D'){
int k;
cin>>k;
k=ph[k];
heap_sort(k,size1--);
up(k),down(k);
}
else{
int k,x;
cin>>k>>x;
k=ph[k];
h[k]=x;
up(k),down(k);
}
}
return 0;
}