#P14625. [IATI2021 day2]Delivery
[IATI2021 day2]Delivery
题目描述
Mathew 开了一家快递公司。他居住的城市中有恰好 10^9 个房子,沿一条直线依次排列。
- 编号为
i的房子与i-1、i+1号房子相邻(如果这些房子存在)。
公司接到了 N 个快递请求,第 i 个请求要求在恰好 T_i 时刻把货送到 H_i 号房子。
已知不存在两个请求同时发生在同一栋房子,也就是说对于 i != j,至少满足以下之一:
T_i != T_j;H_i != H_j。
Mathew 想知道:为了完成所有快递请求,最少需要购买多少辆货车。
每辆货车满足:
- 每经过
1个单位时间,可以向左移动1栋房子,或向右移动1栋房子; - 也可以原地不动;
- 初始时刻可以停在任意房子前;
- 送货本身耗时忽略不计。
请你编写程序 delivery.cpp,求出完成所有请求所需的最少货车数量。
输入格式
第一行一个整数 N,表示请求数量。
接下来 N 行,每行两个整数 T_i, H_i,表示必须在时刻 T_i 向房子 H_i 送货。
输出格式
输出一行一个整数,表示所需的最少货车数量。
数据范围
1 <= N <= 10^61 <= T_i, H_i <= 10^9- 对于
i != j,有T_i != T_j或H_i != H_j
子任务
| 子任务 | 分值 | N |
|---|---|---|
| 1 | 25 | <= 10^3 |
| 2 | 10 | <= 10^4 |
| 3 | 40 | <= 2 * 10^5 |
| 4 | 20 | <= 10^6 |
样例 #1
输入 #1
6
1 1
2 3
3 2
5 4
4 1
4 3
输出 #1
2
说明
最少需要 2 辆货车。
一种可行方案如下:
- 第一辆货车:
(1,1)* -> (2,1) -> (3,1) -> (4,1)* -> (5,1) - 第二辆货车:
(1,2) -> (2,3)* -> (3,2)* -> (4,3)* -> (5,4)*
其中 (t,h) 表示货车在时刻 t 位于房子 h;带 * 的时刻表示该车在该时刻完成了一次送货。