[转载] 管Q某犇借的手写堆

跟gxy大神还有yzh大神学了学手写的堆,应该比stl的优先队列快很多。 
其实就是维护了一个二叉堆,写进结构体里,就没啥了。。。 
据说达哥去年NOIP靠这个暴力多骗了分

合并果子。。。

 1 template<class T> struct heap{//小根堆
 2     T q[mxn<<2];int sz;
 3     heap(){sz=0;}
 4     inline void push(T x){
 5         q[++sz]=x;
 6         for(int i=sz,j=i>>1;j;i=j,j>>=1)
 7             if(q[i]<q[j]) swap(q[i],q[j]);
 8             else break;
 9     }
10     inline void pop(){
11         q[1]=q[sz--];
12         for(int i=1,j=i<<1;j<=sz;i=j,j=i<<1){
13             if((j|1)<=sz&&q[j|1]<q[j]) j|=1;
14             if(q[j]<q[i]) swap(q[i],q[j]);
15             else break;
16         }
17     }
18     inline const T top(){return q[1];}
19 };
20 heap<data> h1,h2;
View Code
原文地址:https://www.cnblogs.com/liutianrui/p/7778947.html