Evanyou Blog 彩带

大根堆(HEAP)模板

这个是以前做的打包模板了。没有用template(其实是不会),用的是class封装,默认类型为int,支持pop,top,push。

#include <bits/stdc++.h>
using namespace std;
class Heap{
	#define SIZE 1000
	private:
		int a[SIZE],size;

		void swap(int &a,int &b)
		{
			int t=a;
			a=b;
			b=t;
		}
	public:	
		Heap()
		{
			memset(a,0,sizeof a);
			size=0;
		}
		bool empty() {return size;}
		int top() {return a[1];}
		void push(int x)
		{
			a[++size]=x;
			int now=size,next;
			while(now>1)
			{
				next=now>>1;
				if(a[next]<a[now]) swap(a[next],a[now]);
				else break;
				now=next;
			}
		}
		void pop()
		{
			a[1]=a[size--];
			a[size+1]=0;
			int now=1,next;
			while((now*2)<=size)
			{
				next=now*2;
				if(a[next]<a[next+1]) next++;
				if(a[now]<a[next]) swap(a[now],a[next]);
				else break;
				now=next;
			}
		}
}a;
int main()
{
}
posted @ 2018-10-15 18:35  MaxDYF  阅读(306)  评论(0)    收藏  举报