ABC457G Catch All Apples

G - Catch All Apples

题意

在数轴上有 NN 个苹果,第 ii 个苹果会在时间 TiT_{i} 掉落在 XiX_{i} 处,你可以在任意位置放置任意机器人,机器人从 0 时刻开始以速度 1 移动,每个机器人同一时刻只能吃一个苹果,求最少需要放置多少个机器人,才能吃完苹果。

N≤3e5N \leq 3e5

思路

先考虑这样一种情况,假设一个机器人在时间 TiT_{i} 吃了位于 XiX_{i} 的苹果,接着要去吃时间 TjT_{j} 位于 XjX_{j} 的苹果( 假设 Tj≥TiT_{j} \geq T_{i} ),由于机器人的速度为 1,它能移动的距离 ≤\leq 时间差,即:

∣Xi−Xj∣≤Tj−Ti|X_{i} - X_{j}| \leq T_{j} - T_{i}

如果把绝对值拆开的话,就能得到下面两个不等式:

  1. Xi−Xj≤Tj−Ti  ⟹  Ti+Xi≤Tj+XjX_{i} - X_{j} \leq T_{j} - T_{i} \implies T_{i} + X_{i} \leq T_{j} + X_{j}
  2. −(Xi−Xj)≤Tj−Ti  ⟹  Ti−Xi≤Tj−Xj-(X_{i} - X_{j}) \leq T_{j} - T_{i} \implies T_{i} - X_{i} \leq T_{j} - X_{j}

观察两个柿子,发现形式上是对称的,不妨令 A=T−X,B=T+XA = T - X, B = T + X。

可以得到:Ai≤AjA_{i} \leq A_{j} 且 Bi≤BjB_{i} \leq B_{j} 时,机器人能从苹果 ii 跑到苹果 jj。

然后在这个 (A,B)(A, B) 的坐标系中,机器人只能向着右上方前进,这是不是就有点类似 LIS 问题了。

问最少需要几个机器人,这就让我们想到 P1020 导弹拦截 - 洛谷 这一题,如果每个机器人吃苹果的路线都是一条不断向右上方延长的链。

那么问题就转化为:求解覆盖所有点的最小链数。根据离散数学中的 Dilworth 定理:

最小链覆盖数 = 最长反链的长度。

反链 在本题语境下指的是一组苹果,其中任意两个苹果都无法被同一个机器人吃到(互相不可达),也就是两个苹果 i,ji, j,既不满足 ii 到 jj 的偏序,也不满足 jj 到 ii 的偏序。

不可达:就是保证 Ai≤AjA_{i} \leq A_{j} 的前提下,不能满足 Bi≤BjB_{i} \leq B_{j},也就是 Bi>BjB_{i} > B_{j},反之先对 BB 排序后,对 AA 的处理同理。

因此,如果我们把所有的苹果都先按照 A 从小到大排序 ( 保证了 A 是不下降的 ),接着为了让他们互相不可达,它们的 B 坐标必须是 严格递减 的,这样就把一个 二维偏序问题,转化为了一个一维偏序问题。

接着就变成了一个 LDS ( 最长严格递减子序列 ) 长度的求解问题,由于规模限制,这里需要采用 O(Nlog⁡N)O(N \log N) 的求法处理。

代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
struct Node { int A, B; } a[maxn];
int n;

bool cmp( Node a, Node b ) {
if( a.A != b.A ) return a.A < b.A;
return a.B < b.B;
}

int LDS( ) {
vector<int> g;
for( int i = 1; i <= n; ++ i ) {
// 小 Trick: 求 B 的严格递减子序列 <=> 求 -B 的严格递增子序列
int x = -a[i].B;
auto it = lower_bound( g.begin( ), g.end( ), x );
if( it == g.end( ) ) g.push_back( x );
else *it = x;
}
return g.size( );
}

void solve( ) {
cin >> n;
for( int i = 1; i <= n; ++ i ) {
int t, x;
cin >> t >> x;
a[i] = { t - x, t + x };
}
sort( a + 1, a + n + 1, cmp );
int res = LDS( );
cout << res << '\n';
}

ABC457G Catch All Apples
http://miqiu.space/posts/eaf5f5bc/
作者
Miqiu
发布于
2026年5月9日
许可协议