经典老番(segment)
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目描述
你没有看错,这又是一道线段树题。
在这道题中,你会得到一个广义线段树,然后对其进行一些复杂度分析。
广义线段树是一棵大小为 的、有恰好 个叶子节点的二叉树。
将这 个叶子节点按照先序遍历的顺序排列,则第 个叶子节点代表的区间是 。
在此基础上:
- 对于一个非叶子节点
- 若其左儿子代表区间为 ,右儿子代表区间为
- 不难发现
- 则该节点代表的区间为
此时定义这个非叶子节点 的分割位置为:
下面给出在线段树上进行区间操作的伪代码:
function F(x, l, r, Fl, Fr)
if Fl ≤ l and Fr ≥ r then
Do Something
return
end if
Do Something
if Fl ≤ mid(x) then
F(Lson(x), l, mid(x), Fl, Fr)
end if
if Fr > mid(x) then
F(Rson(x), mid(x) + 1, r, Fl, Fr)
end if
Do Something
end function
当你需要对区间 进行操作时,你会调用 F(Root, 1, n, Fl, Fr),其中 Root 代表线段树的根节点。
再定义 表示调用 F(Root, 1, n, l, r) 后,函数 F 被调用的总次数(初始调用也计入)。
现在你手上有一棵广义线段树。
你需要对于所有 求出满足: 的数对 的数量。
输入格式
第一行一个整数 。
第二行 个整数,按照先序遍历的顺序,给出每个非叶子节点 的分割位置 。
保证给定的 个整数是一个排列。
不难发现,通过这些信息可以唯一确定一棵广义线段树。
输出格式
一行 个整数,第 个整数表示满足 且 的数对数量。
样例
样例输入 1
6
5 1 3 2 4
样例输出 1
1 2 2 3 6 4 3 0 0 0 0
样例解释 1
样例 1 中给出的线段树如下图:

例如,调用:F(Root, 1, 6, 2, 4) 会对图中所有蓝色节点调用一次函数,因此:。
数据范围与提示
本题共 个测试点,每个测试点分值为 。
测试点具体限制如下:
- 测试点 1:
- 测试点 2, 3:
- 测试点 4, 5:数据生成方式为,从根节点开始,若该非叶子节点代表区间为 ,则在 之间等概率随机一个整数作为这个节点的分割位置,然后用同样的方法 生成该节点的左右子树。
- 测试点 6, 7:对于根节点左子树中的所有非叶子节点,若其代表区间为 ,那么其 值为 ,对于根节点右子树中的所有非叶子节点,若其代表区间为 ,那么其 值为
- 测试点 8, 9, 10:无特殊限制。
- 所有数据满足:
云斗学院 2026 省选计划系列模拟赛 #2
- Status
- Done
- Rule
- OI
- Problem
- 3
- Start at
- 2026-1-2 0:00
- End at
- 2026-1-4 20:00
- Duration
- 5 hour(s)
- Host
- Partic.
- 96
京公网安备 11011102002149号