20250930

Luogu 9521 京都观光

\((x_1, y_1)\)\((x_2, y_2)\)

  • 经过 \((x_1, y_2)\)\(a_{x_1}(y_2-y_1) + b_{y_2}(x_2-x_1)\)
  • 经过 \((x_2, y_1)\)\(a_{x_2}(y_2-y_1) + b_{y_1}(x_2-x_1)\)

\[a_{x_1}(y_2-y_1) + b_{y_2}(x_2-x_1) < a_{x_2}(y_2-y_1) + b_{y_1}(x_2-x_1)\iff \frac{b_{y_2} - b_{y_1}}{y_2 - y_1} < \frac{a_{x_2} - a_{x_1}}{x_2 - x_1} \]

因此会优先走斜率小的那边。

  • 经过 \((x_3, y_1)\)\((x_3, y_2)\)\(a_{x_3}(y_2 - y_1) + b_{y_1}(x_3 - x_1) + b_{y_2}(x_2 - x_3)\)

若比上面两个方案都要小:

\[\begin{aligned} &a_{x_3}(y_2 - y_1) + b_{y_1}(x_3 - x_1) + b_{y_2}(x_2 - x_3) < a_{x_1}(y_2-y_1) + b_{y_2}(x_2-x_1)\\ &\iff\frac{a_{x_3} - a_{x_1}}{x_3-x_1} < \frac{b_{y_2} - b_{y_1}}{y_2-y_1}\\ &a_{x_3}(y_2 - y_1) + b_{y_1}(x_3 - x_1) + b_{y_2}(x_2 - x_3) < a_{x_2}(y_2-y_1) + b_{y_1}(x_2-x_1)\\ &\iff\frac{a_{x_2} - a_{x_3}}{x_2-x_3} > \frac{b_{y_2}-b_{y_1}}{y_2-y_1}\\ &\therefore \frac{a_{x_3} - a_{x_1}}{x_3-x_1} < \frac{b_{y_2} - b_{y_1}}{y_2-y_1} < \frac{a_{x_2} - a_{x_3}}{x_2-x_3} \end{aligned} \]

只有下凸壳上的点,可能岔出去并在另一条坐标轴的方向上移动,会是有用的。

维护两个下凸壳,双指针即可,\(O(n)\)

Luogu 9732 Trade

对一个区间,它的答案 \(f(l, r)\) 为:\(s_i\)\(k\) 大的和减去 \(c_i\) 的总和。令 \(g(l, r)\) 表示区间前 \(k\) 大的和。

经过一些分类讨论,得出:区间前 \(k\) 大满足四边形不等式 \(g(l, r) + g(l+1, r+1) \ge g(l, r + 1) + g(l + 1, r)\)

因为不等式两边减去同样的数,所以 \(f\) 满足四边形不等式,原问题有决策单调性。

用主席树做区间前 \(k\) 大,设 \(p_i\) 为右端点为 \(i\) 的最优左端点,答案相同取最靠右的,进行决策单调性分治可以 \(O(n \log^2 n)\) 完成第一问。

第二问,对于 \(f(l, r) = ans\)\([l, r]\),若区间第 \(k\) 大为 \(v\),则区间内所有 \(\ge v\) 的数都能出现在一种方案中。

称一个右端点 \(r\) 是合法的,当且仅当 \(f(l, r) = ans\)。对于当前合法右端点 \(r\),上一个合法的右端点为 \(r'\),那么只需要考虑 \(l \in [p_{r'}, p_r]\)

证明不需要考虑 \(l < p_{r'}, f(l, r) = ans\) 的情况:

引理:\(f(l, r) - f(l, r') \le f(p_{r'}, r) - f(p_{r'}, r')\)

引理的证明考虑等价于 \(g(l, r) - g(l, r') \le g(p_{r'}, r) - g(p_{r'}, r')\)。这是成立的,因为向一个集合加入一些元素,其前 \(k\) 大之和的增量,不小于向其超集加入的增量。

根据引理以及 \(f(l, r) \le f(p_{r'}, r')\)\(f(p_{r'}, r) \le f(p_r, r)\),可知:\(f(l, r) = f(p_{r'}, r) = f(p_r, r) = ans\)\(f(l, r') = f(p_{r'}, r') = ans\)

也就是说,\(f(p_{r'}, r)\)\(f(l, r')\) 都会先被考虑。而区间 \([l, r]\) 的第 \(k\) 大一定不小于 \([p_{r'}, r]\)\([l, r']\) 的第 \(k\) 大,不会让更小的数出现在方案中,于是这样的区间 \([l, r]\) 可以被忽略。

扫描线,拿树状数组维护即可。

Luogu 7417 Minimizing Edges

转化后做最大匹配,注意到(场上并未发现)把相同值的点缩起来之后得到若干条链。

\(i\) 种物品有 \(a_i\) 个,每次在 \((i, i +1)\) 各取一个,最多能取多少个,经典从左往右贪心。

posted @ 2025-09-30 16:49  SZwinsun  阅读(9)  评论(0)    收藏  举报