手写堆
Posted seamtn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写堆相关的知识,希望对你有一定的参考价值。
(搭配手写swap)
系统自带的常数很大。
il void swap(int &x,int &y)x^=y^=x^=y;
struct Heap
int f[Maxn*20],tot;
inline int top() return f[1];
inline int size() return tot;
inline void clear() tot=0; return;
inline void push(Reg int x)
f[++tot]=x;
for(Reg int i=tot;i;i>>=1)
if((i>>1)>=1&&f[i>>1]>f[i]) swap(f[i>>1],f[i]);
return;
inline void pop()
f[1]=f[tot--];
for(Reg int i=1,p;i<=tot;)
p=i<<1; if(p>tot) break;
if((p|1)<=tot&&f[p|1]<f[p]) p|=1;
if(f[p]<f[i]) swap(f[p],f[i]);
else break; i=p;
return;
q;
以上是关于手写堆的主要内容,如果未能解决你的问题,请参考以下文章