#HK5425. 「OOI 2017 Day 1」高效测试

「OOI 2017 Day 1」高效测试

题目描述

题目译自 Open Olympiad in Informatics 2017 Day1 T3 「Эффективное тестирование / Efficient Evaluation

20xx20xx 年开始,所有编程奥林匹克竞赛的组织者一致同意仅通过互联网举办比赛,为此成立了有限责任公司「在线奥林匹克组织」(简称 OOO)。显然,这样一个重要的组织不能没有自己的评测系统,因此他们聘请了高效的经理,购买了白板,并准备了蓝色胶带。

为了提高评测过程的效率,开发了以下架构。最初,任务的所有 mm 个测试点按照从 11mm 的顺序排列在评测队列中。然后,规划模块依次执行 nn 个操作。第 ii 个操作包括选择队列中从位置 lil_irir_i(包含两端,以 11 开始编号)的片段,并在该片段上每隔一个测试点进行解决方案的检查,即在队列位置 li,li+2,li+4,,ril_i, l_i + 2, l_i + 4, \ldots, r_i 上的测试点(保证 lil_irir_i 具有相同的奇偶性)。随后,被检查的测试点从队列中删除,剩余的测试点向前移动以填补空位,确保队列中没有空隙。例如,如果队列中包含测试点的原始编号为 2,3,4,5,10,12,13,202, 3, 4, 5, 10, 12, 13, 20,并且执行了一个操作 li=3l_i = 3ri=7r_i = 7,那么解决方案将在位置 335577 的测试点上进行评测,这些测试点的原始编号为 4,10,134, 10, 13。操作完成后,评测队列将包含原始编号为 2,3,5,12,202, 3, 5, 12, 20 的测试点。

你的任务是实现一个模块,对于上述 nn 个操作中的每一个,确定在该步骤中检查的测试点中,原始编号的最小值和最大值。

输入格式

输入数据的第一行包含两个数字 nnmm (1n100000,1m1018)(1 \leq n \leq 100000, 1 \leq m \leq 10^{18}),分别表示规划模块的操作数量和任务中的测试点数量。

接下来的 nn 行,每行包含两个整数 lil_irir_i (1lirim)(1 \leq l_i \leq r_i \leq m),表示第 ii 个规划模块操作的参数。保证在执行第 ii 个操作之前,评测队列中至少有 rir_i 个测试点,并且 lil_irir_i 具有相同的奇偶性。

输出格式

对于 nn 个规划模块操作中的每一个,输出两个整数,即在该步骤中检查的测试点中,原始编号的最小值和最大值。

2 10
2 8
1 3

2 8
1 5

让我们看一下第一个样例中评测队列是如何变化的:

  1. 最初,评测队列包含从 111010 的所有测试点,即队列为 1,2,3,4,5,6,7,8,9,101, 2, 3, 4, 5, 6, 7, 8, 9, 10
  2. 执行第一个请求时,将删除测试点 2,4,6,82, 4, 6, 8,队列变为 1,3,5,7,9,101, 3, 5, 7, 9, 10
  3. 执行第二个请求时,将删除测试点 1155,队列变为 3,7,9,103, 7, 9, 10
4 6
1 1
1 1
1 1
2 2

1 1
2 2
3 3
5 5

数据范围与提示

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

子任务 分值 附加限制 子任务依赖 备注
11 1010 n100n \leq 100m100m \leq 100 00
22 99 n10000n \leq 10000m10000m \leq 10000 0,10, 1
33 1313 m1000000m \leq 1000000 020 \sim 2
44 1515 n1000n \leq 1000 0,10, 1
55 1717 n10000n \leq 10000 02,40 \sim 2, 4
66 3636 050 \sim 5