跳转至

二分算法

  • 若题目中和平均数有关,可以考虑将数列中所有数都减去平均数,再看最大子段和能否大于0
  • 二分的 check 函数里写什么算法都可以。比如SPFA、DP等等。我想出了把DP写在check函数里
  • \(n\) 个一次函数 \(y_i=k_i x+b_i\) 中选出若干,使 \(\sum{y_i}\) 不能超过上限(或不能低于下限) \(lim\) ,求 \(x\) 的最值。可以考虑使用二分+nth_element,计算指定 \(x\)\(\sum{y_i}\) 的最值,和 \(lim\) 比较
  • 从数据范围入手。Ex: 对于 \(100\%\) 的数据,满足 \(0\leq M\leq N\leq 5\times 10^4\)\(1\leq L\leq 10^9\)\(0\leq D_i\leq L\)。 我们注意到 \(M\)\(N\) 的范围不大,但 \(L\) 很大。因此我们优先考虑枚举 \(M\)\(N\) 的算法,而不需要枚举 \(L\) 的算法。
  • 一定情况下,可以将数列中各个元素的奇偶性转换为它们求和的奇偶性。因为一个奇数和若干偶数的和还是奇数,而偶数的和就是偶数了。
  • 题目中若包含 “若无解,则输出-1” 等类似的意思,可先判断是否有解,再计算答案。