W
e
l
c
o
m
e
: )

朴素地构造

link

棋盘只有两行,路径完全由“在哪一列往下走”决定,记这个列为 \(k\),即

\[\min \{G_k=\max(U_k,L_k)\} \]

其中 \(U_k\)\(k\) 右边上方剩下的和,\(L_k\)\(k\) 左边下方剩下的和。

原策略等价于最小化剩下的总和

\[R_k=U_k+L_k。 \]

最终要使得:

  1. \(R\)唯一的最小值点 \(p\)
  2. 这个 \(p\) 不是 \(G\) 的最小值点(即存在别的路径让空拿得更少)。

左上角 \(a_{1,1}\) 和右下角 \(a_{2,n}\) 每条路径都会经过,对比较毫无影响,随便填。

\(x_i=a_{1, i+1}, y_{i}=a_{2, i}\),可如此表示相邻两条路径的 \(R\) 差:

\[R_{k+1}-R_k=y_k-x_k。 \]

所以“\(R_p\) 是唯一最小”等价于:

  • \(p\) 往左走,\(R\) 严格变大 \(\iff\) \(p\) 左边所有 \((x-y)\) 的后缀和都 \(>0\)
  • \(p\) 往右走,\(R\) 严格变大 \(\iff\) \(p\) 右边所有 \((y-x)\) 的前缀和都 \(>0\)

假设白已经唯一选了 \(p\),显然 \(G\)单峰,那么最优解不是 \(p\) 等价于 “ \(G_{p+1}<G_p\)\(G_{p-1}<G_p\) ” 。

构造解只需要考虑一边成立,另一边反过来再做一次即可。

右边要成立,只需要

\[L_p+y_p < U_p \]

接下来构造:

  1. 左边\(i<p\)
    为了让不等式右边尽量小,同时保证所有后缀和为正,直接取

    \[x_i=\text{上界},\quad y_i=\text{下界}。 \]

    \(e_i=\) 上界 \(x\) \(-\) 下界 \(y\)
    用一个简单递推

    \[s_i=e_i+\min(0,s_{i-1}) \]

    就能算出“所有以 \(i\) 结尾的后缀和的最小值”。只要 \(s_{p-1}\ge 1\),左边就合法。

  2. 中心 \(p\)
    必须让 \(y_p-x_p=z\ge 1\),否则右边第一步 \(R\) 就不会严格上升。
    同时还要保证右边所有前缀和条件能满足,所以 \(z\) 还要至少是 \(\text{need}_p+1\)\(\text{need}_p\) 是右边 \(L\) 序列可能出现的最大前缀和)。
    取满足所有下界的最小 \(z\),这样给右边留的余地最大。

  3. 右边\(i>p\)
    固定 \(y_i=\) 上界,令 \(w_i=x_i-y_i\)
    现在要在“所有前缀和 \(\le z-1\)”的约束下,最大化 \(\sum w\),这样才能让不等式左边尽量大。
    这个最大值有闭式:

    \[\text{best}=\min\bigl(\text{全部取上界的和},\quad (z-1)+\text{某个后缀的上界和}\bigr)。 \]

    用后缀和 + 后缀最小值即可。

如果最终算出的左边最大值严格大于右边的最小值即有解。

找到合法的位置 \(p\) 后,就按上面判定时用的取法填:

  • 左边直接取极值;
  • 中心随便找一组满足差值 \(z\)\((x_p,y_p)\)
  • 右边固定 \(y=\) 上界,再构造满足前缀约束的 \(w\)(先算出每个前缀和能到达的区间,再从最终和倒推即可)。

如果右边找不到,就把整个 \(x,y\) 序列左右翻转,再用完全相同的算法找一次(对应原来的左边反例)。两边都失败就输出 \(-1\)

整段过程全部是线性预处理 + 一次枚举 \(p\),总复杂度 \(O(n)\)

posted @ 2026-08-07 18:27  127_127_127  阅读(11)  评论(0)    收藏  举报