线段树的每个节点存什么
第 1 步:每个节点存一段的和 第 2 步:查下标 1 到 3,从根出发 第 3 步:两边都只沾一部分:往下拆 第 4 步:全包住的段直接拿来 第 5 步:拿到的几段加起来就是答案 92 56 36 41 15 13 23 17 24 线段
查一段区间和要多久(C++)
用线段树查任意一段区间的和,代价是【0】。
中间那三个数的和
数组是 17、24、15、13、23,查下标 1 到 3 的和。 运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #in
整段里最大的是几
同一个数组。 运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #include <string> #incl
把线段树建起来
补全 seg_build:叶子存单个元素,非叶子存左右两个孩子之和。建好之后输出根节点存的值(也就是整段的和)。 (本题用 g++ -std=c++17 -O0 编译。)
查一段区间的和
补全 seg_sum:查下标 ql 到 qr 这一段的和。查下标 1 到 3,输出结果。 (本题用 g++ -std=c++17 -O0 编译。)
把求和换成求最大
线段树不止能求和。补全 max_build:把合并那一步从相加换成取较大的。建好之后输出根节点存的值。 (本题用 g++ -std=c++17 -O0 编译。)
改一个值再查一次
把下标 2 上的 15 改成 30,然后重新建树、查下标 1 到 3 的和。(这里偷个懒:改完之后整棵树重建一次;真正的线段树只需要沿一条路往上更新,下一节就写。) (本题用 g++ -std=c++17 -O0 编译。)
线段树数组要开多大
第 1 步:数组的下标 0 到 13 第 2 步:n=6 时建树要用这些格 第 3 步:开 2n=12 格:12、13 越界 第 4 步:开 4n 就一定够用 0 1 2 3 4 5 6 7 8 9 10 11 12 13 n 个数的线段树
大数组为什么开成全局
竞赛代码里大数组常开成全局变量而不是函数里的局部变量,是因为【0】。