首页 > 其他分享 >ARC168E

ARC168E

时间:2023-12-11 20:11:45浏览次数:28  
标签:二分 sum wqs leq ARC168E 区间 代价

题面

给定长度为 \(n\) 的数列 \(\{a_i\}\) 和两个参数 \(k, s\),将 \(\{a_i\}\) 划分成 \(k\) 段,最大化 和 \(\geq s\) 的段数。

\(1 \leq k \leq n \leq 250000, 1 \leq A_i \leq 10^9, 1 \leq s \leq 10^{15}\)。

题解

首先注意到如果当前划分的一段 \(sum<s\) ,那么这种段的长度肯定是 \(1\) 。

那么我们就只考虑 \(sum\ge s\) 的段,我们就可以把原问题转化为:我要在原序列中选择 \(m\) 个区间(区间和划分段是等价的),满足以下条件,问 \(m\) 最大是多少。

  • 每一个区间的 \(sum\ge s\)
  • 选出的区间不能有交
  • 记一个选出来的区间的代价为 \(len-1\) ,那么代价和要小于 \(n-k\)

注意随着你选的区间增加,代价肯定是越来越大的,也就是记 \(f(x)\) 表示选 \(x\) 个区间的最小代价,\(f(x)\) 是上凹的(证明可以看官方题解

所以可以用wqs二分!

但我们一般用wqs二分是来找到 \((x,f(x))\) 的值,这里是要找到 \(\max(x|f(x)\le n-k)\) ,可以用吗?

当然可以,我们只要二分斜率 \(mid\) ,找到切点,看切点的 \(f(x)\) 大于还是小于 \(n-k\) ,若大于,则 \(mid\) 太大了,切到的点在我们想要的 \(x\) 点的右边了,反之亦然。

于是我就可以求出答案了(要注意 \(K_{x,x+1}\) 与 \(K_{x-1,x}\) 相等的情况,需要做一些处理 )复杂度就是 \(O(n\log n)\) 。

启发

  • 一种全新的wqs二分运用形式!
  • 原问题的转化也值得留意。

标签:二分,sum,wqs,leq,ARC168E,区间,代价
From: https://www.cnblogs.com/qwq-123/p/17895453.html

相关文章

  • [ARC168E] Subsegments with Large Sums
    题目链接看到严格选\(k\)个,不难想到WQS二分。定义\(f(x)\)为分成\(x\)段,最多有多少个超过\(S\)的。然后你会发现他不是凸的。因为他有很多平段,比如把两个很小的合并不改变答案。换个方向?考虑定义\(f(x)\)为有\(x\)个超过\(S\)的段,最多有多少个段。然后发现这个......
  • [ARC168E] Subsegments with Large Sums
    有点意思的简单题。答案有可二分性。合并两段,显然仍然合法。考虑如何check。因为答案可以被二分,我们尝试求恰好\(x\)段就行了。恰好,这是wqs二分的内容。如何设计一个与\(x\)有关的凸函数呢?这个函数大概是\(\sum_{i=1}^xw(l_i,r_i)\)的形式,每一个\([l,r]\)都是合......
  • ARC168E
    简要题意给定一个长度为$n$的序列$a$,将$a$划分为$k$个连续段,最大化满足连续段中元素和$\geqs$的连续段数。题解首先发现是恰好$k$个连续段,这种类型的题套路地考虑wqs二分,然后你会惊喜的发现这玩意不是凸的,我的思考也就卡在这里了。正确的做法是观察到答案具有单......