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\) 次。记录方案也是容易的。

浙公网安备 33010602011771号