日记

日记

Tue Apr 08 2025
5 分钟
1061 字

今天是真的不颓。

T1 Link to T1

如果说有这样的 a={1,2}a = \{1,2\}b={100,101}b = \{100,101\},显然我们不能先加 a1a_1,而应该先加 a2a_2。而后又看到 xx 可以为负,想到如果说将 aia_i 加上 xx 使得 ai=bia_i = b_iai>ai+1a_i > a_{i + 1},我们就连一条 i+1ii + 1 \to i 的边。可以证明这是一个有向无环图。因此我们一定有用 i=1n[aibi]\sum\limits_{i = 1}^{n}[a_i \ne b_i] 次的方法使得 a=ba = b

现在我们考虑使代价更小。考虑对于一个 (aibi)2(a_i - b_i)^2,要使它变小,我们考率分多次。显然等分最优。赛时想到了做背包 dp,复杂度 O(nm2)O(nm^2)。可以拿到 50\color{#5ec05e}{50} 的好成绩。看这个绿色就知道确实很好

正解是整一个大根堆。将每个 (aibi)2(a_i - b_i)^2 多分一个的负贡献插入,比如初始就放每个 (aibi)2(a_i - b_i)^211 次到 22 次的负贡献。取 mi=1n[aibi]m - \sum\limits_{i = 1}^{n}[a_i \ne b_i] 次就好。

没放代码是因为下次再做的时候希望能自己写出来。

T2 Link to T2

听 HD0X 讲的。

看到冒泡排序,想到逆序对。离线,从大到小枚举 ii,并枚举每个 x=ix = i 的查询,计 uu 表示 ii 位置前面的比它大的数量,vv 表示 ii 位置后面的比它大的数量。让我们分类讨论一下(下文的 kk 都指查询的 kkidid 指查询编号,posipos_iii 的原位置):

  • kuk \le u
    这样的话,ii 前面的会在 kk 次冒泡后跑到 ii 后面去并把 ii 往前挤,ansid=posikans_{id} = pos_i - k
  • ku+vk \le u + v
    从头开始考虑 kk 次冒泡。每次冒泡,一定会有一个比 ii 更大的数 PjP_j 被一个更大的数 Pj+1P_{j + 1} 堵住,且位置比 Pj+1P_{j + 1} 左一个。
    我们掏个样例出来:{4,3,5,1,2}\{4,3,5,1,2\}。我们想要查询 33 在第 22 次冒泡后的位置。
    11 次冒泡:{3,4,1,2,5}\{3,4,1,2,5\}4455 堵住,位置 1-1
    22 次冒泡:{3,1,2,4,5}\{3,1,2,4,5\}3344 堵住,位置 1-1
    这样我们看到 3311 的位置。这个 11 是由 55 最初的位置经过 221-1 后得到的。
    我们再掏一个样例:{3,4,2,5,1}\{3,4,2,5,1\}。我们想要查询 22 在第 33 次冒泡后的位置。
    11 次冒泡:{3,2,4,1,5}\{3,2,4,1,5\}4455 堵住,位置 1-1
    22 次冒泡:{2,3,1,4,5}\{2,3,1,4,5\}3344 堵住,位置 1-1
    33 次冒泡:{2,1,3,4,5}\{2,1,3,4,5\}2233 堵住,位置 1-1
    2211 的位置。这个 11 是由 55 最初的位置经过 331-1 得到的。
    我们发现,因为在这 kk 次里会被堵 kk 次,所以最初的位置(就是上文的 55 的最初的位置)一定是比 ii 大的数按照原序列的顺序的第 kk 个。而每次被堵会使得下标 1-1,所以答案就是比 ii 大的数的第 kk 个的位置减 kk
  • k>u+vk > u + v
    显然这个时候 ii 归位了,ansid=nuvans_{id} = n - u - v

实现可以这样:因为我们从大到小枚举 ii,用线段树维护。每次算完 ii 都将线段树 posipos_i 的地方置为 11uu 就是 [1,posi][1,pos_i] 的区间和,vv 就是 [posi,n][pos_i,n] 的区间和。“比 ii 大的数按照原序列的顺序的第 kk 个”可以通过线段树上二分找到第 kkii。因为只有 k>uk > u 时才会询问第 kk 个,所以第 kk 个一定在 ii 原位置的右边。

T3 & T4 Link to T3 & T4

补题速度还是太快了一点,没看。

后日谈 Link to 后日谈

之前的考试挂分 50\color{#ff0000}{50} 起步,今天只挂了 10\color{#5ec05e}{10} 分,可喜可贺。

要是 T1 没有被背包误导的话就更好了。好歹有 50 分嘛

今天晚上有 div.3,打不打呢?