把线段树建起来
补全 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】。
数组越界写会怎样
C++ 里往数组越界的位置写数据,通常会【0】。
五个数用到的最大下标
对 5 个数建线段树(根是 1 号),看看用到的最大下标是多少。 运行下面这段程序: #include <algorithm> #include <iostream> #include <map> #in
十万个数的全局数组多大
开一个能装 10 万个数的线段树全局数组,看看它占多少 MB(整除取整)。 运行下面这段程序: #include <algorithm> #include <iostream> #include <map>
六个数要用到几号格
补全 max_index:返回对区间 [l, r] 建线段树时用到的最大编号。输出 6 个数的线段树用到的最大编号。 (本题用 g++ -std=c++17 -O0 编译。)