码迷,mamicode.com
首页 > 其他好文 > 详细

手写堆

时间:2019-08-16 22:30:28      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:ret   struct   top   reg   line   系统   class   inline   turn   

(搭配手写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;

 

手写堆

标签:ret   struct   top   reg   line   系统   class   inline   turn   

原文地址:https://www.cnblogs.com/seamtn/p/11366396.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!