2019.2.16线段树模板

Posted pipihoudewo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019.2.16线段树模板相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <string>
using namespace std;
const int maxen=5000;
int a[maxen+5],st[(maxen<<2)+5]; //a函数为主函数读入的数组,st为需要查询的数的信息,树的空间大小的四倍;
void build(int o,int l,int r){ //o为当前需要建立的节点,l为左端点,r为右端点
if(l==r){
st[o]=a[l]; //当左端点与右端点相同时,即为叶子节点,直接赋值即可;
}
else{
int m=l+((r-l)>>1); //m为中间点,左儿子为[l,m],右儿子为[m+1,r];
build(o<<1,l,m); //构建左儿子节点
build((o<<1)|1,m+1,r);//构建右儿子节点
st[o]=st[o<<1]+st[(o<<1)|1];//递归返回时用儿子结点更新父节点,此处可进行更新最大值、最小值、区间和等操作
}
}
int main(){
build(1,1,n);
}






















以上是关于2019.2.16线段树模板的主要内容,如果未能解决你的问题,请参考以下文章

模板-线段树

线段树 (区间覆盖模板)

[模板] 线段树合并

权值线段树套序列线段树

洛谷P3372线段树模板1——线段树

[模板]线段树2-线段树