2025.6.23 模拟赛

6.23 模拟赛

9+25+32=66,rk 38/85

不会构造/kk 没有人类智慧

rich

考虑如何快速判断两个数的大小关系(考场上怎么都不会这个/kk)
自然的想法是要尽量“独立”,即减少其他数的影响,这样传递信息的效率就会高。

显然将 \(i\)\(j\) 分别放到第一个和第二个,交换一下,答案变化只与 \(i,j\) 间大小关系有关。
这样直接写 sort 就能 \(\mathcal O(3n\log n+O(n))\)
改进一下,先 \(O(n)\) 代价找最大值(放到第一个看答案是不是 \(1\)),然后把最大值放到第三个,这样就不需要交换前两个了。

下面开始人类智慧。

考虑增量构造,先对前 \(m\) 个数排序,然后将后面的数插进去。
此时把一个数放到第一个就能得出这个数所在的块,把块排好序后递归每个块内部排序即可。

需要加一些优化,比如一个块内元素数量 \(\le 1\) 就不需要排序,还有元素数量 \(\le 2\) 的时候手动排等。

number

\(g_{i,j}=f_{i,j}+Xj,h_{i,j}=f_{i,j}-Xj\),那么就是最小化 \(\max\limits_{i\neq j}g_{i,a_i}+h_{j,a_j}\)

如果 \(g_{i,x}<g_{i,y}\)\(h_{i,x}<h_{i,y}\),那 \(y\) 显然没有用,所以可以每个 \(i\) 只保留一个 \(g\) 递增 \(h\) 递减的二元组序列,后面 \(a_i\) 表示这个序列上的下标。

对于每个 \((i,j)\)\(g_{i,a_i}+h_{j,a_j}\le ans\)\(a_i\) 固定时 \(a_j\) 的限制是一个后缀,且随着 \(a_i\) 增大限制越来越紧。我们一开始先让 \(a_i=1\),每次更新答案后找一对 \(g_{i,a_i}+h_{j,a_j}\) 最大的 \((i,j)\)(使用堆维护最大值和次大值)给 \(a_j\) 加一,最多只会做 \(nk\) 次。记录方案也是容易的。

posted @ 2025-06-25 11:21  Cindy_Li  阅读(17)  评论(0)    收藏  举报