为了noip2016d2t2,手写了一个堆。。。
int num[71000010];
int size,T;
inline int top() {
int u=num[1];
num[1]=num[size];
num[size--]=-99999999;
int i=1;
while(1) {
if(num[i]<num[ i<<1 ]&&(i<<1)<=size)
if(num[i<<1]>num[(i<<1)+1]) {
T=num[i];
num[i]=num[ i<<1 ];
num[ i<<1 ]=T;
i<<=1;
} else {
T=num[i];
num[i]=num[(i<<1)+1];
num[(i<<1)+1]=T;
i=(i<<1)+1;
}
else if(num[i]<num[(i<<1)+1]&&(i<<1)+1<=size) {
T=num[i];
num[i]=num[(i<<1)+1];
num[(i<<1)+1]=T;
i=(i<<1)+1;
} else break;
}
return u;
}
inline void push(int N) {
num[++size]=N;
int i=size;
while(i!=1) {
if(num[i]>num[i>>1]) {
T=num[i];
num[i]=num[i>>1];
num[i>>1]=T;
i>>=1;
} else break;
}
}