#P15921. [Roi2021]砍树

    ID: 15132 传统题 2000ms 1024MiB 尝试: 2 已通过: 1 难度: 8 上传者: 标签>CF2400数据结构线段树树状数组二分

[Roi2021]砍树

题目描述

组织“2D”负责签发沿公路砍树的许可。公路旁共有 nn 棵树,第 ii 棵树生长在坐标 xix_i 处,高度为 hih_i。树的信息按坐标递增给出,即:

x1<x2<<xnx_1<x_2<\cdots<x_n

树可以一棵一棵砍倒。砍树时,树会被从根部砍断,然后必须向左或向右倒下。为了保证树倒下时不被损坏,它不能碰到尚未砍倒的其他树。

更准确地说:

  • 若坐标为 xix_i、高度为 hih_i 的树向右倒,则不能存在尚未砍倒的树 xjx_j 满足
xi<xj<xi+hix_i<x_j<x_i+h_i
  • 若这棵树向左倒,则不能存在尚未砍倒的树 xjx_j 满足
xihi<xj<xix_i-h_i<x_j<x_i

在最左边树 x1x_1 左侧和最右边树 xnx_n 右侧有重要建筑,因此树不能倒到区间 [x1,xn][x_1,x_n] 外。也就是说:

  • 如果 xihi<x1x_i-h_i<x_1,则第 ii 棵树不能向左倒;
  • 如果 xi+hi>xnx_i+h_i>x_n,则第 ii 棵树不能向右倒。

第一个样例中,先把第二棵树向右倒,再把第三棵树向左倒,最后把第一棵树向右倒。整理为 Markdown 时此处可插入原 PDF 第 6 页的图。

现在有 qq 个砍树申请。每个申请由两个数 li,ril_i,r_i 给出,表示申请者只想砍编号从 lil_irir_i 的树。

处理一个申请时,只允许砍编号在 [li,ri][l_i,r_i] 内的树。砍倒的树可以倒到编号 lil_i 左侧或编号 rir_i 右侧的区域,但仍然不能倒出整个区间 [x1,xn][x_1,x_n],也不能碰到编号不在 [li,ri][l_i,r_i] 中、尚未被砍的树。

对每个申请,要求计算在不损坏任何树的前提下,最多可以砍掉多少棵编号在该区间内的树。每个申请相互独立。

输入格式

第一行包含两个整数 n,qn,q

接下来 nn 行,每行包含两个整数 xi,hix_i,h_i,表示第 ii 棵树的位置和高度。

保证:

x1<x2<<xnx_1<x_2<\cdots<x_n

接下来 qq 行,每行包含两个整数 li,ril_i,r_i,表示一个申请。

输出格式

对每个申请输出一行,表示最多可以砍掉的树的数量。

数据范围

1n,q5000001\le n,q\le 500000 1xi109,1hi1091\le x_i\le 10^9, \qquad 1\le h_i\le 10^9 1lirin1\le l_i\le r_i\le n

样例 1 输入

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

样例 1 输出

0
2
3

样例 2 输入

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

样例 2 输出

5
1
0

样例 3 输入

1 1
100 100
1 1

样例 3 输出

0

子任务

子任务 分值 限制 依赖 检查信息
1 15 n,q100n,q\le 100 U 第一处错误
2 n,q500n,q\le 500 U, 1
3 n,q5000n,q\le 5000 U, 1-2
4 5 n,q10000n,q\le 10000 U, 1-3
5 10 n,q100000n,q\le 100000 U, 1-4
6 n,q200000n,q\le 200000 U, 1-5
7 30 n,q500000n,q\le 500000 U, 1-6 按测试计分,只显示分数

第 7 个子任务包含 30 个测试点,每个测试点独立计 1 分。只有当前六个子任务全部通过后,才会测试第 7 个子任务。