首页 > 其他分享 >前缀和,差分,二叉堆

前缀和,差分,二叉堆

时间:2023-12-17 17:57:54浏览次数:31  
标签:前缀 int void 差分 二叉 heap

目录

前缀和

一维数组前缀和


代码如下:

for(int i=0;i<n;i++){
  if(i==0) y[i]=x[i];
  else y[i]=y[i-1]+x[i];
}

或者

for(int i=1;i<=n;i++){
    y[i]=y[i-1]+x[i];
}

二维数组前缀和


代码如下:

for(int i=1;i<=n;i++){
    for(int j=1;j<=n;j++){
         cin>>a[i][j];
         b[i][j]=b[i-1][j]+b[i][j-1]-b[i-1][j-1]+a[i][j];  
    }
}

差分

差分就是前缀和的逆运算

b[i]=a[i]-a[i-1];

还原差分

a[i]=a[i-1]+b[i];

二叉堆

  1. 上浮
void swim(int n)
{
	for(int i = n;i > 1 && heap[i] > heap[i/2]; i /= 2){
		swap(heap[i],heap[i / 2]);
	}
}
  1. 下沉
void sink(int n)
{
	for(int i = n,t = son(i);t <= size && heap[t] > heap[i] i = t,t = son(i)){
		swap(heap[i],heap[t]);
	}
}
  1. 插入
  void insert(int x)
{
	heap[++size] = x;
	swim(size);
}
  1. 找到需要交换的那个子节点
int son(int n)
{
	return n * 2 + (n * 2 + 1 <= size && heap[n * 2 + 1] > heap[n * 2]);
}
  1. 删除
void pop()
{
	swap(heap[1],heap[size--]);
	sink(1);
}
  1. 查询
int top()
{
	return heap[1];
}

标签:前缀,int,void,差分,二叉,heap
From: https://www.cnblogs.com/yishujia/p/17909450.html

相关文章

  • Python算法——二叉树遍历
    Python中的二叉树遍历算法详解二叉树是一种常见的树状数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。遍历二叉树是访问树的所有节点并按照特定顺序输出它们的过程。在本文中,我们将讨论二叉树的三种主要遍历算法:前序遍历、中序遍历和后序遍历,并提供相应的Python代码......
  • java实现二叉树前序搜索输出深度完整代码
    importjava.util.Scanner;//1:无需package//2:类名必须Main,不可修改classTreeNode{publicintval;publicTreeNodeleft;publicTreeNoderight;publicTreeNode(intval){this.val=val;this.left=null;this.right=null;}}p......
  • C语言 层次遍历二叉树
    代码如下#include<stdio.h>#include<stdlib.h>#defineMax_Size50typedefstructbitree{chardata;intlevel;structbitree*lchild;structbitree*rchild;}BiTreeNode,*BiTree;typedefstructqueue{BiTreeData[Max_Size];......
  • C++U5-10-二叉树3
    学习目标 二叉树重建的概念 二叉树重建流程 例题和解题思路 2 3 4 5 [【二叉树】求先序排列]  代码【算法分析】后序遍历的最后一个是根节点,由这个根节点可以在中序遍历中确定左子树和右子树的大小和元素,然后递归的去处理左子树和右子树,由于是......
  • 【教3妹学编程-算法题】反转二叉树的奇数层
    3妹:“你不是真正的快乐,你的笑只是你穿的保护色”2哥 :3妹还在唱五月天的歌啊,你不知道五月天假唱,现在全网都在骂呢。3妹:知道啊,可是关我什么事,这个歌的确好听啊。2哥 :嗯嗯,不错,还以为你是脑残粉,无论黑白都只管追星呢。3妹:我是只管追歌的,歌好听就行啦。2哥 :追哥?追哪个哥,难......
  • 第六章 二叉树part01
    第六章二叉树**part01**  递归遍历 144.二叉树的前序遍历 Code:/***Definitionforabinarytreenode.*structTreeNode{*  intval;*  TreeNode*left;*  TreeNode*right;*  TreeNode():val(0),left(nullptr),right(nullpt......
  • 二叉树
    二叉排序树classNode{ constructor(value){ this.value=value this.left=null this.right=null }}classTree{ constructor(){ this.root=null this.travelResult=[] } insertByFather(father,node){ if(father.value>node.value){ ......
  • 二叉搜索树(BST)
    \(INF\)表示无效值的常量,\(Node\)表示二叉搜索树的结点,\(key、count、left、right\)分别表示节点的键值、数量、左孩子、右孩子,\(size\)表示以该节点为根的子树大小,\(root\)表示树的根节点。\(private\)中的函数解析见注释。\(public\)中:\(empty\):判断树是否为空,时间复杂度:\(O(1......
  • 655. 输出二叉树(中)
    目录题目题解题目给你一棵二叉树的根节点root,请你构造一个下标从0开始、大小为mxn的字符串矩阵res,用以表示树的格式化布局。构造此格式化布局矩阵需要遵循以下规则:树的高度为height,矩阵的行数m应该等于height+1。矩阵的列数n应该等于2的(height+1)次......
  • 第六节:二叉树详解
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......