专栏文章

题解:CF2152F Triple Attack

CF2152F题解参与者 2已保存评论 5

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
5 条
当前快照
1 份
快照标识符
@minp8l9r
此快照首次捕获于
2025/12/02 06:06
3 个月前
此快照最后确认于
2025/12/02 06:06
3 个月前
查看原文
一开始读成 <z<z 然后发现是宝宝题,然而对本题做法没有任何启发。
题意等价于选一个子序列满足 yiyi2>zy_i-y_{i-2}>z,因此需要按奇偶分别考虑。先考虑如果合法条件是 yiyi1>zy_i-y_{i-1}>z 的话怎么做。可以无脑离线但是对本题做法没有任何启发,令 fif_i 代表 ii 后面第一个 xjxi>zx_j-x_i>z 的位置 jj,则贪心地从 ll 开始不断跳 ff 直到超过 rr 即可,套个倍增即可维护。这里我们建树 (i,fi)(i,f_i) 方便理解。
考虑怎么做原题,仍然贪心地选择 y1=l,y2=l+1y_1=l,y_2=l+1,此时我们要分别构造两条链,理想的情况是 y1,y2y_1,y_2 各自跳父亲,互不影响。但实际上显然跳到 lca(y1,y2)\text{lca(}y_1,y_2) 时会出现问题,两条链怎么能重复呢。这个时候我们要令一条链换个位置,贪心的换成 lca+1\text{lca}+1 即可。如果 lca\text{lca} 超过了 rr,直接分别跳两条链即可。当然不能每次暴力大跳到 lca\text{lca} 复杂度不对,可以再套一个倍增。
具体来说,先倍增的跳 lca\text{lca} 直到这个位置要超过 rr 了,然后分别两个小倍增跳两条链。复杂度 O((n+q)logn)O((n+q)\log n)
submission:https://codeforces.com/contest/2152/submission/341854975

评论

5 条评论,欢迎与作者交流。

正在加载评论...