线段树是一种经典的数据结构,一颗 的线段树他的根是 ,当一个线段树的结点是 时,设 ,则这个结点的左儿子右儿子分别是 , 。
当我们在线段树上跑 询问时,一般是从根节点开始计算的,设现在所在结点是 ,有以下几种分支:
- 若 包含 ,计算结束。
- 否则,若左儿子和 有交,计算左儿子,若右儿子和 有交,计算右儿子。
定义询问 的费用是询问时计算了几个结点。
给定 次询问,每次给定 , ,求满足 的 的费用之和。
Constraints
Solution
直接在线段树上维护答案。
假设当前节点编号为 ,代表的区间为 ,则令: 表示两个端点都在区间 内的答案; 表示查询左端点为 ,右端点位于 的答案; 表示查询右端点为 ,左端点位于 内的答案。
具体的统计方式见代码。
Code
1 |
|