AGC015E Mr.Aoki Incubator

发布时间 2023-07-21 08:35:03作者: Ender_32k

这种点对移动互相感染的题,一般可以建笛卡尔坐标系。每个点 \(i\) 坐标为 \((V_i,X_i)\),若有两个点 \(a,b\) 的相遇时间为 \(\dfrac{X_a-X_b}{V_b-V_a}\),即 \(-k_{ab}\)

所以当且仅当两个点连接直线的斜率为负数时,两个点会在时间 \(t_{ab}=-k_{ab}\) 相遇。现在考虑如果只有一个点 \(a\) 被染色,然后 \(a\) 感染了 \(b\)\(b\) 再感染了 \(c\) 的条件:显然是要求 \(t_{ab}<t_{bc}\),即 \(k_{ab}>k_{bc}\)

所以一个点被 \(a\) 直接/间接感染,当且仅当它可以通过一条斜率单调上升且均为负数的路径到达 \(a\)。于是我们考虑 \(a\) 的影响范围。

不难可以猜到结论:\(a\) 的影响范围为 \(V_{i}\in [V_l,V_r]\) 的点,其中 \(l\) 为满足 \(k_{al}\le 0\) 中的点中 \(V\) 值最小的点,\(r\) 为满足 \(k_{ar}\le 0\) 的点中 \(V\) 值最大的点。

一方面,因为如果一个点 \(b\) 使得 \(V_b<V_l\),显然有 \(X_b<X_a\)。由于 \(b\) 想被 \(a\) 影响到必须要经过一条斜率单调上升且均为负数的路径,并且它一定要往右边走,所以走路径的过程中 \(X\) 值是单调下降的,那就不可能走到 \(a\) 了。\(V_b>V_r\) 同理,可以画图理解。

另一方面,对于 \(V_{b}\in [V_l,V_r]\) 的点,假设 \(V_{b}<V_a\)(另一边同理),考虑两种情况:

  • \(k_{ab}<0\),可以直接被 \(a\) 感染。
  • \(k_{ab}>0\),画图发现 \(b\) 显然可以被 \(l\) 感染。

证毕。

所以可以先将所有点按照 \(V\) 排序,一个点 \(a\) 影响的是一段区间 \([l_i,r_i]\) 的点。问题转化为线段覆盖求方案数。

\(f_i\) 为覆盖到 \(i\) 的方案数,显然对于一个点 \(i\)\(f_{r_i}\) 可以被 \(\sum\limits_{k=l_i-1}^{r_i}f_k\) 转移。前缀和优化即可。

复杂度 \(O(n\log n)\)。预处理我用的树状数组。

评测记录。