专栏文章

题解:AT_abc431_g [ABC431G] One Time Swap 2

AT_abc431_g题解参与者 1已保存评论 0

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@min9ow1s
此快照首次捕获于
2025/12/01 22:51
3 个月前
此快照最后确认于
2025/12/01 22:51
3 个月前
查看原文

前情提要

不喜欢语言学的信息学奥赛生小 W 在今晚的 ABC 中扔掉 EF 猛攻 G 题最后得到了高达 1351 的 perf。在这次经历后小 W 和不喜欢字符串一样不喜欢平衡树。

解题思路

我们考虑交换这一操作的性质,可以将 f(l,r)f(l,r) 分三类:
  1. Al<ArA_l<A_r 这会使其字典序变小。ll 越小,新序列的字典序越小,对于 ll 相等的 ArA_r 越小字典序越小。
  2. Al=ArA_l=A_r 这不会改变字典序。其数目为 i=1ncnti(cnti1)2\sum_{i=1}^{n} \frac{cnt_i(cnt_i-1)}{2}
  3. Al>ArA_l>A_r 这会使其字典序变大。ll 越小,新序列的字典序越大,对于 ll 相等的 ArA_r 越大字典序越大。
所以我们可以把所有询问离线下来并排序,一边统计一边求答案。具体地:我们维护当前类别的某个 ll 有多少个 rr 符合要求,同时为在这一范围内的询问分配对应排名的 rr。这个过程可以被转化为:插入或删除一个数、求一个数的排名、求排名为 xx 的数。用一个平衡树维护即可。
要注意的是本体要输出的是具体的位置而非交换的数值,我们可以在插入数的时候将这个数乘上一个大数再加上它的位置,这样就可以按照数值第一关键字地址第二关键字排序了!改变正负号就可以选择升序降序。

评论

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

正在加载评论...