算法思路
该算法,主要有四种基本函数
1.pushup(u):用子节点信息来更新当前节点信息(把信息往上传递)2、build(u,l,r):在一段区间上初始化线段树,其中u表示根结点,l表示左边界,r表示右边界
3、query(u,l,r):查询某段区间的和,其中u表示根结点,l表示左边界,r表示右边界
4、modify(u,x,v):修改操作,在u结点中,x位置加上v
线段数图解
修改操作
查询操作
模版题
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 1e5 + 10;
int w[N];
struct Node
{
int l, r;
int sum;
}tr[N * 4];
//这里一般是数据的4倍
void pushup(int u)
{
// u << 1 | 1 --> 2x + 1
tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1]