专栏文章

P11833

P11833题解参与者 2已保存评论 3

文章操作

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

当前评论
3 条
当前快照
1 份
快照标识符
@miq2wknw
此快照首次捕获于
2025/12/03 22:04
3 个月前
此快照最后确认于
2025/12/03 22:04
3 个月前
查看原文
考场上别人怎么都写的线段树,就我写的 odt。
我们发现,假设当前每个人的位置在 pip_i,那么必然有 pi<pi+1p_i \lt p_{i + 1}。这个关系是严格的,不太好处理,所以让所有 ai,bia_i, b_i 减去 ii,这个关系就变成不严格的 pipi+1p_i \le p_{i + 1}
本题的结论就是按照 tit_i 从小到大排序,然后分别将 ii 推向 bib_i,同时将 pip_ibib_i 中的所有人都推向 bib _i。具体证明其他题解应该都写了,就不写了
可以发现,假设 pi<bip_i < b_i,则我们需要的是将所有 pj[pi,bi)p_j \in [p_i, b_i)jj 移动到 bib_i,移动的步数是 jbipj\sum_j b_i - p_j。计算结束后,还会把所有这样的 pjp_j 赋值为 bib_i
因此可以考虑 odt。令线段 (l,r,v)(l, r, v) 表示当前 pl,,pr=vp_l, \dots, p_r = v,则我们只需把所有 v[pi,bi)v \in [p_i, b_i) 的线段的 (rl+1)(biv)(r - l + 1)(b_i - v) 加起来即可。
由于初始时有 O(n)O(n) 个线段,每次操作只会加入一个线段,因此总共的线段数是 O(n)O(n) 级别的。又由于每个线段在访问一次后就会被删除,因此最终的复杂度就是 O(nlogn)O(n\log n) 的了。
但是此做法常数有点大,不知道会不会挂分。

评论

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

正在加载评论...