A3037 「ROI 2021 Day2」砍树

暂无评定 传统题 ROI(俄罗斯) 上传者
时间限制2000ms
内存限制1024MiB
通过 / 提交0/0

A3037「ROI 2021 Day2」砍树

暂无评定 传统题 ROI(俄罗斯) 上传者
时间限制2000ms
内存限制1024MiB
通过 / 提交0/0

题目描述

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

2D 组织负责发放森林砍伐许可证。他们收到了一些沿公路砍伐树木的申请。公路上有 nn 棵树,第 ii 棵树位于坐标 xix_i 处,高度为 hih_i。树木的信息按坐标顺序排列,即 x1<x2<…<xn−1<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 范围内不应有未砍伐的树木。如果这棵树向左倒下,则在 xi−hi<xj<xix_i - h_i < x_j < x_i 范围内不应有未砍伐的树木。

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

trees.png

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

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

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

输入格式

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

接下来的 nn 行,每行包含两个整数 $x_i, h_i\ (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,ri (1≤li≤ri≤n)l_i, r_i\ (1 \leq l_i \leq r_i \leq 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

数据范围与提示

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

子任务 分值 附加限制 子任务依赖
11 1515 n,q≤100n, q \leq 100 00
22 1515 n,q≤500n, q \leq 500 0,10, 1
33 1515 n,q≤5000n, q \leq 5000 0,1∼20, 1\sim 2
44 55 n,q≤104n, q \leq 10^4 0,1∼30, 1\sim 3
55 1010 n,q≤105n, q \leq 10^5 0,1∼40, 1\sim 4
66 1010 n,q≤2⋅105n, q \leq 2\cdot 10^5 0,1∼50, 1\sim 5
77 3030 n,q≤5⋅105n, q \leq 5\cdot 10^5 0,1∼60, 1\sim 6

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