专栏文章

题解:AT_awtf2024_d Almost Bubble Sort

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@miq9mwj5
此快照首次捕获于
2025/12/04 01:13
3 个月前
此快照最后确认于
2025/12/04 01:13
3 个月前
查看原文
转化成给每个 iibi=0/1b_i=0/1 的权值,bi=1b_i=1 代表 aia_i 要加 INF,答案就是最终序列的逆序对数。考虑按照 aia_i 从大到小赋值并确定在最终序列里的排名,每个时刻已经确定的排名都形如 ...000..111...000..111
bi=1b_i=1,则将 ii 插入最后一个 11 之前, 这同时意味着所有满足 j>i,aj<aij\gt i,a_j \lt a_i 的位置都会形成逆序对,因为最终序列中 ii 之后不可能再插入新的数。同理,若 bi=0b_i=0,将 ii 插入第一个 00 之前,ii 与所有满足 j<i,ai<ajj \lt i, a_i \lt a_j 的位置形成逆序对。
SSbi=1b_i=1ii 构成的集合。
这里有一个关键结论,i<j,bi=1,bj=0ai<aj\forall i \lt j, b_i=1,b_j=0 \rightarrow a_i \lt a_j。严格证明的话,找到最近的点对 i,ji,j,使得 bi=1,bj=0,ai>ajb_i=1,b_j=0, a_i \gt a_j,调整为 bi=0,bj=1b_i=0,b_j=1,将 (x,ax)(x,a_x) 画在二维平面上,则 (i,ai),(j,aj)(i,a_i),(j,a_j) 为顶点向上/下/左/右画出的射线可以将平面划分成 99 个区域,因为 i,ji,j 为最近点对,所以中间区域没有点。然后分别讨论其余 88 个区域内的点跟 i,ji,j 形成的逆序对数变化量,四个角上的区域变化量为 00,剩下的区域也能分讨出变化量 0\leq 0,可以证明是更优的。
于是可能的逆序对 (i,j)(i,j) 共有 33 种情况:
  1. ai>aj,bi=0,bj=0a_i \gt a_j, b_i=0,b_j=0
  2. ai>aj,bi=1,bj=1a_i \gt a_j, b_i=1,b_j=1
  3. ai<aj,bi=1,bj=0a_i \lt a_j, b_i=1,b_j=0
fi=j=1i1[aj>ai],gi=j=i+1n[aj<ai]f_i=\sum_{j=1}^{i-1} [a_j\gt a_i],g_i=\sum_{j=i+1}^{n} [a_j \lt a_i]
根据题解第二段的内容,若 bi=0b_i=0,对逆序对数贡献 fif_i,若 bi=1b_i=1,对逆序对数贡献 gig_i。发现少算了情况 33,那么再令 bi=1b_i=1 时额外加上 nin-i,这样会多算情况 22ai<aj,bi=1,bj=1a_i \lt a_j, b_i=1,b_j=1,也就是 (S2)\binom{|S|}{2}。因为贡献之间独立,于是一开始令 S|S|00,增量扩大 SS,这样就能减掉 (S2)\binom{|S|}{2}
复杂度 O(nlogn)O(n\log n)

评论

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

正在加载评论...