题目描述
译自 ROI 2021 Day2 T3. Вырубка деревьев
2D 组织负责发放森林砍伐许可证。他们收到了一些沿公路砍伐树木的申请。公路上有 n 棵树,第 i 棵树位于坐标 xi 处,高度为 hi。树木的信息按坐标顺序排列,即 x1<x2<…<xn−1<xn。
树木可以按以下方式逐一砍伐。树木从根部砍倒,然后必须向左或向右倒下。为了避免树木在倒下时受损,它不能碰到距离小于其高度的其他未砍伐的树木。换句话说,如果位于 xi 处、高度为 hi 的树木向右倒下,则在 xi<xj<xi+hi 范围内不应有未砍伐的树木。如果这棵树向左倒下,则在 xi−hi<xj<xi 范围内不应有未砍伐的树木。
在 x1 处的树木左侧和 xn 处的树木右侧有重要建筑物,因此禁止将树木倒在 [x1,xn] 范围之外。换句话说,位于 xi 处、高度为 hi 的树木不能向左倒下,如果 xi−hi<x1,也不能向右倒下,如果 xi+hi>xn。

组织收到 q 份砍伐树木的申请。每个申请由两个数字 li 和 ri 表示,意味着申请人希望砍伐编号从 li 到 ri 的树木。
在执行申请的过程中,只允许砍伐编号从 li 到 ri 的树木。被砍倒的树木可以倒向编号 li 左侧或编号 ri 右侧的区域,但不能超出区间 [x1,xn]。不允许碰到编号不在 li 到 ri 范围内的树木。
对于每个申请,需要计算在不损坏任何树木的情况下,可以砍伐的最大树木数量。每个申请应独立处理。
输入格式
第一行包含两个整数 n,q (1≤n,q≤5⋅105),表示树木数量和申请数量。
接下来的 n 行,每行包含两个整数 $x_i, h_i\ (1 \leq x_i \leq 10^9, 1 \leq h_i \leq 10^9)$,描述每棵树的位置和高度。保证 x1<x2<…<xn。
接下来是 q 行,每行包含两个整数 li,ri (1≤li≤ri≤n),表示申请砍伐的树木编号范围。
输出格式
对于每个申请,输出在不损坏任何树木的情况下可以砍伐的最大树木数量。
3 3
1 3
3 1
4 2
1 1
2 3
1 3
0
2
3
5 3
1 5
3 1
4 2
5 3
6 1
1 5
5 5
1 1
5
1
0
1 1
100 100
1 1
0
数据范围与提示
详细子任务附加限制及分值如下表所示。其中子任务 0 是样例。
| 子任务 |
分值 |
附加限制 |
子任务依赖 |
| 1 |
15 |
n,q≤100 |
0 |
| 2 |
15 |
n,q≤500 |
0,1 |
| 3 |
15 |
n,q≤5000 |
0,1∼2 |
| 4 |
5 |
n,q≤104 |
0,1∼3 |
| 5 |
10 |
n,q≤105 |
0,1∼4 |
| 6 |
10 |
n,q≤2⋅105 |
0,1∼5 |
| 7 |
30 |
n,q≤5⋅105 |
0,1∼6 |
在第 7 个子任务中,有 30 个测试点,每个测试点单独评分,分值为 1。只有在通过前六个子任务的所有测试点后,才会对这些测试点进行评分。