#L4230. 「ROI 2021 Day2」砍树

    ID: 4426 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 9 上传者: 标签>动态规划贪心数据结构单调栈线段树2021ROI稀疏表区间查询

「ROI 2021 Day2」砍树

题目描述

译自 ROI 2021 Day2 T3. Вырубка деревьев

2D 组织负责发放森林砍伐许可证。他们收到了一些沿公路砍伐树木的申请。公路上有 nn 棵树,第 ii 棵树位于坐标 xix_i 处,高度为 hih_i。树木的信息按坐标顺序排列,即 x1<x2<<xn1<xnx_1 < x_2 < \ldots < x_{n-1} < x_n

树木可以按以下方式逐一砍伐。树木从根部砍倒,然后必须向左或向右倒下。为了避免树木在倒下时受损,它不能碰到距离小于其高度的其他未砍伐的树木。换句话说,如果位于 xix_i 处、高度为 hih_i 的树木向右倒下,则在 xi<xj<xi+hix_i < x_j < x_i + h_i 范围内不应有未砍伐的树木。如果这棵树向左倒下,则在 xihi<xj<xix_i - h_i < x_j < x_i 范围内不应有未砍伐的树木。

x1x_1 处的树木左侧和 xnx_n 处的树木右侧有重要建筑物,因此禁止将树木倒在 [x1,xn][x_1, x_n] 范围之外。换句话说,位于 xix_i 处、高度为 hih_i 的树木不能向左倒下,如果 xihi<x1x_i - h_i < x_1,也不能向右倒下,如果 xi+hi>xnx_i + h_i > x_n

组织收到 qq 份砍伐树木的申请。每个申请由两个数字 lil_irir_i 表示,意味着申请人希望砍伐编号从 lil_irir_i 的树木。

在执行申请的过程中,只允许砍伐编号从 lil_irir_i 的树木。被砍倒的树木可以倒向编号 lil_i 左侧或编号 rir_i 右侧的区域,但不能超出区间 [x1,xn][x_1, x_n]。不允许碰到编号不在 lil_irir_i 范围内的树木。

对于每个申请,需要计算在不损坏任何树木的情况下,可以砍伐的最大树木数量。每个申请应独立处理。

输入格式

第一行包含两个整数 n,qn, q (1n,q5105)(1 \leq n, q \leq 5\cdot 10^5),表示树木数量和申请数量。

接下来的 nn 行,每行包含两个整数 xi,hix_i, h_i (1xi109,1hi109)(1 \leq x_i \leq 10^9, 1 \leq h_i \leq 10^9),描述每棵树的位置和高度。保证 x1<x2<<xnx_1 < x_2 < \ldots < x_n

接下来是 qq 行,每行包含两个整数 li,ril_i, r_i (1lirin)(1 \leq l_i \leq r_i \leq n),表示申请砍伐的树木编号范围。

输出格式

对于每个申请,输出在不损坏任何树木的情况下可以砍伐的最大树木数量。

样例 1

输入

3 3
1 3
3 1
4 2
1 1
2 3
1 3

输出

0
2
3

样例 2

输入

5 3
1 5
3 1
4 2
5 3
6 1
1 5
5 5
1 1

输出

5
1
0

样例 3

输入

1 1
100 100
1 1

输出

0

数据范围与提示

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖
1 1515 n,q100n, q \leq 100 0
2 n,q500n, q \leq 500 0, 1
3 n,q5000n, q \leq 5000 0, 1~2
4 55 n,q104n, q \leq 10^4 0, 1~3
5 1010 n,q105n, q \leq 10^5 0, 1~4
6 n,q2105n, q \leq 2\cdot 10^5 0, 1~5
7 3030 n,q5105n, q \leq 5\cdot 10^5 0, 1~6

在第 7 个子任务中,有 30 个测试点,每个测试点单独评分,分值为 1。只有在通过前六个子任务的所有测试点后,才会对这些测试点进行评分。