首页 > 其他分享 >二叉堆模板

二叉堆模板

时间:2023-01-27 14:11:06浏览次数:43  
标签:struct int 二叉 start topper 模板

constexpr int N = 10001;
struct Heap{
	int datA[N]; // start from 1
	int siz;
	// int (*topper)(int, int);
#define topper(a, b) ((a)<(b))
	void up(int id){
		while(id!=1 && topper(datA[id], datA[id/2])){
			std::swap(datA[id], datA[id/2]);
			id/=2;
		}
	}
	void down(int id){
		while(id*2<=siz){
			int t = id*2;
			if(t+1<=siz && topper(datA[t+1], datA[t])) t++;
			if(topper(datA[id], datA[t])) return;
			std::swap(datA[id], datA[t]);
			id=t;
		}
	}
	void ins(int x){
		siz++;
		datA[siz] = x;
		up(siz);
	}
	int gettop(){ return datA[1]; }
	void deltop(){
		std::swap(datA[1], datA[siz]);
		--siz;
		down(1);
	}
	void mk(){ for(int i=siz; i; --i) down(i); }
} hp;

标签:struct,int,二叉,start,topper,模板
From: https://www.cnblogs.com/x383494/p/17068871.html

相关文章

  • A Template for C-Language Library Creation - 一个创建C语言运行库的模板
    ATemplateforC-LanguageLibraryCreation一个创建C语言运行库的模板WesupposethelibrarywewanttocreateislibElec.1)Createafolderinyourdisk,suchas......
  • 【图论】最短路模板
    SPFA:inlinevoidspfa(intx){memset(dis,0x3f,sizeof(dis));memset(vis,0,sizeof(vis));dis[x]=0;vis[x]=true;Q.push(x);while(!Q.empty()){intu......
  • 模板方法设计模式
    模板方法设计模式1.说明核心是:定义一个模板类,在模板类中规定其整体的骨架并确定哪些方法是允许子类可以去重写的,哪些是不允许子类去重写的.用来保证核心算法不被破坏.......
  • 多项式模板
    多项式模板\(\text{导数运算法则}\)$(x\pmy)'=x'\pmy'$$(ax)'=ax'$(\(a\)为常数)\((xy)'=x'y+xy'\)$(\displaystyle\frac{x}{y})=\displaystyle......
  • 堆和二叉树的关系
    逻辑结构VS物理结构堆:逻辑结构是一颗二叉树(如下图)物理结构是一个数组(如下代码) //上图是一个堆(从小到大)可以用数组表示constheap=[-1,10,14,25,33,81,......
  • 二叉树中是否存在某值
    constbinarySearchTree=(node=tree,target=8)=>{letcurNode=nodewhile(true){if(!curNode){returnfalse}......
  • 二叉树寻找最k小值
    /***注意:left/right值若没有显示设置为null,值即为undefined*在调用二叉树前、中、后序遍历方法时,由于参数设置了默认值(tree)*所以进入了死循环*/consttree={......
  • 刷刷刷 Day 23 | 538. 把二叉搜索树转换为累加树
    538.把二叉搜索树转换为累加树LeetCode题目要求给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(GreaterSumTree),使每个节点node 的新值等于原树......
  • 刷刷刷 Day 23 | 108. 将有序数组转换为二叉搜索树
    108.将有序数组转换为二叉搜索树LeetCode题目要求给你一个整数数组nums,其中元素已经按升序排列,请你将其转换为一棵高度平衡二叉搜索树。高度平衡二叉树是一棵满......
  • C++可变参数模板
    template<class...T>voidf(T...args){cout<<sizeof...(args)<<endl;}sizeof...一整个是运算符可以通过递归或逗号表达式方式展开该参数包可以使用这种可......