手写堆

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;

 

以上是关于手写堆的主要内容,如果未能解决你的问题,请参考以下文章

手写堆

Luogu [P1334] 瑞瑞的木板(手写堆)

手写堆

POJ-2442 Sequence(手写堆优化)

手写堆

POJ-1442 Black Box(手写堆优化)