c++的线段树怎么写
时间: 2023-02-20 10:22:48 浏览: 110
线段树是一种递归的数据结构,其基本思想是将原序列分成若干个小的区间,并对每个区间建立一个线段树节点。具体实现的步骤如下:
1. 定义结构体:需要记录每个节点的左右区间范围以及其他需要维护的信息,例如区间最大值、区间和等。
2. 建树:递归建树,对于每个节点,都需要构造它的左右儿子。
3. 修改:在线段树上递归,找到需要修改的元素所在的节点,并对该节点的信息进行更新。
4. 查询:在线段树上递归,找到询问区间在线段树上对应的节点,并对该节点及其父亲节点进行信息合并。
下面是一个简单的线段树代码实现,求序列区间和:
```
#include <cstdio>
const int N = 100005;
int n, m, a[N];
struct Node {
int l, r;
int sum;
} tree[N << 2];
void build(int u, int l, int r) {
tree[u].l = l;
tree[u].r = r;
if (l == r) {
tree[u].sum = a[l];
return;
}
int mid = (l + r) >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
tree[u].sum = tree[u << 1].sum + tree[u << 1 | 1].sum;
}
void update(int u, int x, int k) {
阅读全文