题意:

\[\begin{aligned}
&\text{给定长度为 } n \text{ 的数列 } \{a_i\} \text{ 和两个参数 } k, s \text{,将 } \{a_i\} \text{ 划分为 } k \text{ 段,最大化和} \geq s \text{ 的段数。} \\
&k\le n\le 2.5e5
\end{aligned}
\]

思路

有划分为恰好 \(k\) 段的限制,我们可以考虑wqs二分。发现直接将答案作为 \(y\) 轴是没有单调性的,因此只能换一下。

发现由于我们要让有贡献的段数尽量大,因此要让没有贡献的段长尽量小,因此没有贡献的段长直接设为1。

然后就又发现我们要让有贡献的段数尽量大,也要让有贡献的段长尽量小。

因此我们设 \(f(x)\) 为总贡献为 \(x\) 时有贡献的段的总长度。然后发现当可以划分的合法序列的段数大于 \(k\) 的时候,一定可以通过某种合并方式使得这个序列的划分的段数变为 \(k\) 同时仍然合法。

因此对于一个序列,其合法的限制条件就是 \(k\le x+n-f(x)\),即 \(\sum{r-l}\le n-k\)。

然后就将 \(sum{r-l}\) 作为 \(y\) 轴,二分的总贡献 \(x\) 作为 \(x\) 轴,直接wqs二分即可。

code

需要注意同样需要特殊判定多个点在同一条直线上的情况。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=3e6+7;
int n,K,s,a[N],sum[N],pre[N];
pair <int,int> f[N];
bool check(int k){
for(int i=1;i<=n;i++){
f[i]=f[i-1];if(pre[i]>=1) f[i]=min(f[i],{f[pre[i]-1].first+i-pre[i]-k,f[pre[i]-1].second+1});
}
return (f[n].first+f[n].second*k<=n-K);
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>K>>s;
for(int i=1;i<=n;i++) cin>>a[i],sum[i]=sum[i-1]+a[i];
for(int i=1,loc=0;i<=n;i++) {while(sum[i]-sum[loc-1]>=s) loc++;pre[i]=loc-1;}
int l=1,r=n,ansk=l;
while(l<=r){
int mid=(l+r)>>1;
if(check(mid)) ansk=mid,l=mid+1;
else r=mid-1;
}
int eee=check(ansk),x=min(f[n].second,K),y=f[n].first+f[n].second*ansk;
while(y+ansk<=n-K&&x<K) x++,y+=ansk;
cout<<x;return 0;
}

AT_arc168_e [ARC168E] Subsegments with Large Sums 题解的更多相关文章

  1. [CF1204E]Natasha,Sasha and the Prefix Sums 题解

    前言 本文中的排列指由n个1, m个-1构成的序列中的一种. 题目这么长不吐槽了,但是这确实是一道好题. 题解 DP题话不多说,直接状态/变量/转移. 状态 我们定义f表示"最大prefix ...

  2. CF1656E Equal Tree Sums 题解

    题目链接 思路分析 自认为是一道很好的构造题,但是我并不会做. 看了题解后有一些理解,在这里再梳理一遍巧妙的思路. 我们先来看这样的一张图: 我们发现当去掉叶子节点的父亲时,剩下树的价值和等于叶子节点 ...

  3. LuoguP4759 [CERC2014]Sums 题解

    Content 给定 \(t\) 组数据,每组数据给定一个数 \(n\),判断 \(n\) 是否能够分解成连续正整数和,能的话给出最小数最大的方案. 数据范围:\(1\leqslant n\leqsl ...

  4. CodeForces 223C Partial Sums 多次前缀和

    Partial Sums 题解: 一个数列多次前缀和之后, 对于第i个数来说他的答案就是 ; i <= n; ++i){ ; j <= i; ++j){ b[i] = (b[i] + 1l ...

  5. DP | Luogu P1466 集合 Subset Sums

    题面:P1466 集合 Subset Sums 题解: dpsum=N*(N+1)/2;模型转化为求选若干个数,填满sum/2的空间的方案数,就是背包啦显然如果sum%2!=0是没有答案的,就特判掉F ...

  6. E. Change-free

    Student Arseny likes to plan his life for n days ahead. He visits a canteen every day and he has alr ...

  7. 《Complete Guide to Value Investing》读书总结

    大好的周末,决定写一篇读书笔记.:) 最近读了一些股票估值以及价值投资相关的文章和书籍.今天将其中的一本做一些笔记以及简单的总结. 该书名为<Complete Guide to Value In ...

  8. 每日英语:Got 5 Minutes? 'Flash Fiction' Catches On

    Chinese author Lao Ma has a simple approach to his short stories: In the face of life, everything is ...

  9. NCE3

    Lesson1  A puma at large Pumas are large, cat-like animals which are found in America. When reports ...

  10. New Concept English three(14)

    06:55:29 32w/m 45words. There was a time when the owners of shop and businesses in Chicago had to pa ...

随机推荐

  1. 当向json数组追加节点时,再去修改它,发现所有的该节点的数据都被修改了

    当向一个json数组追加的节点被修改时,所有对象的的节点都被修改了 众所周知,追加json节点时,我们通常会直接给不存在的节点赋值 比如这样: let json = [ { id:'1' }, { i ...

  2. Linux - lvm逻辑卷的操作

    执行 lsblk如下所示: [root@idc-poc-60 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 3.7G 0 r ...

  3. 读论文-序列感知推荐系统(Sequence-Aware Recommender Systems)

    前言 今天读的论文为一篇于2018年发表在(ACM computing surveys (CSUR))的论文,这篇文章主要讲述了序列感知推荐系统(Sequence-Aware Recommender ...

  4. Win系统重装备忘

    蒙德,致态的盘坏块激增,似乎损坏到了系统文件:屏幕截屏会卡,关机后直接该块硬盘内的文件内容回滚,出现驱动报错要求重启... 然后尝试了DiskGenuis迁移系统,PE模式不能用,热迁移后似乎正常分区 ...

  5. golang结构体判断是否为空

    前言 使用任何编程语言都会遇到判空的问题,那么Golang对于自定义的结构体类型如何判空呢? 其实空结构体可不是简单的与nil做比较哦.请看下面两种方法: package main import ( ...

  6. 编写你的第一个 Django 应用程序,第8部分

    本教程从教程 7 停止的地方开始.我们已经构建了我们的网络投票应用程序,现在将查看第三方软件包. Django 的优势之一是丰富的第三方软件包生态系统.它们是社区开发的包,可用于快速改进应用程序的功能 ...

  7. git clone加速

    使用github的镜像网站进行访问,github.com.cnpmjs.org,我们将原本的网站中的github.com 进行替换.

  8. 安装卸载GNOME

    只需要三步:sudo yum -y groups install "GNOME Desktop"sudo systemctl set-default graphical.targe ...

  9. Oracle 内存(SGA,PGA)详细介绍

    一.名词解释(1)SGA:SystemGlobal Area是OracleInstance的基本组成部分,在实例启动时分配;系统全局域SGA主要由三部分构成:共享池.数据缓冲区.日志缓冲区.(2)共享 ...

  10. bug|electron-vue 使用 electron-builder 打包,执行 yarn run build 报错原因

    问题 & 解决 官方BUG:tasks 重复: yarn run build yarn run v1.22.22 $ node .electron-vue/build.js && ...