正题

题目链接:https://www.luogu.com.cn/problem/P4983


题目大意

给出长度为nnn的序列xxx,记平均数为xˉ\bar{x}xˉ,要求将序列分成mmm段。
每一段[l,r][l,r][l,r]的值为
((∑i=lrxi×xˉ)+xˉ)2xˉ2\frac{((\sum_{i=l}^rx_i\times \bar x)+\bar x)^2}{\bar x^2}xˉ2((∑i=lr​xi​×xˉ)+xˉ)2​

求所有段的值和最小

1≤m≤n≤105,1≤xi≤10001\leq m\leq n\leq 10^5,1\leq x_i\leq 10001≤m≤n≤105,1≤xi​≤1000


解题思路

直接除以xˉ2\bar x^2xˉ2就是最小化(∑i=lrxi+1)2(\sum_{i=l}^rx_i+1)^2(∑i=lr​xi​+1)2的和。

然后这个问题是下凸函数,设f(i)f(i)f(i)表示恰好分成iii段,那么显然段数越多答案越小而且每次减少的越少。

所以我们可以用wqswqswqs二分给每次分一个段加上一个权值valvalval。

那么现在的转移就是
Fi=min{Fj+(si−sj+1)2+val}(j<i)F_i=min\{F_j+(s_i-s_j+1)^2+val\}(j<i)Fi​=min{Fj​+(si​−sj​+1)2+val}(j<i)

这是经典的斜率优化不过多赘述。

时间复杂度O(nlog⁡W)O(n\log W)O(nlogW)(WWW表示二分值域)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,m,s[N],f[N],g[N],x[N],y[N],q[N];
ll count(ll l,ll r)
{return f[l]+(s[r]-s[l]+1)*(s[r]-s[l]+1);}
ll xj(ll p,ll q,ll z)
{return (x[p]-x[z])*(y[q]-y[z])-(x[q]-x[z])*(y[p]-y[z]);}
ll check(ll val){int head=1,tail=0;q[++tail]=0;for(ll i=1;i<=n;i++){while(head<tail&&2ll*s[i]*(x[q[head+1]]-x[q[head]])>(y[q[head+1]]-y[q[head]]))head++;f[i]=count(q[head],i)+val;g[i]=g[q[head]]+1;y[i]=f[i]+s[i]*s[i]-2*s[i];x[i]=s[i];while(head<tail&&xj(i,q[tail],q[tail-1])>=0)tail--;q[++tail]=i;}return g[n];
}
signed main()
{scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++)scanf("%lld",&s[i]),s[i]+=s[i-1];ll l=0,r=1e18;while(l<=r){ll mid=(l+r)>>1;if(check(mid)<=m)r=mid-1;else l=mid+1;}check(l);printf("%lld\n",f[n]-l*m);return 0;
}

P4983-忘情【wqs二分,斜率优化】相关推荐

  1. P4383 [八省联考2018]林克卡特树(树形dp+wqs二分)

    [八省联考2018]林克卡特树 题目大意:给定一棵有负权边的树,现在必须恰好删去 k k k条边,并加上恰好 k k k条权值为 0 0 0的边,要求最大化它的直径长度. 首先考虑删去 K K K条边 ...

  2. POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)

    $ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...

  3. jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】

    正题 题目大意 有nnn个人mmm辆车. 人有tit_iti​,车有fjf_jfj​.第i个人修第j俩车时间是ti∗fjt_i*f_jti​∗fj​. 一辆车要每个人都修一遍,且一个人修好后要求下一个 ...

  4. BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分

    传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...

  5. 洛谷P4383 [八省联考2018]林克卡特树lct(DP凸优化/wqs二分)

    题目描述 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做"LC ...

  6. P3994 高速公路 树形DP+斜率优化+二分

    $ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...

  7. [学习笔记]dp凸优化/wqs二分[八省联考2018]林克卡特树lct

    废话 很早就想学wqs二分,结果拖了好久.因为以前是看了几遍都没有懂..(太菜了 后来因为计划里凸优化的题(比如CF321E Ciel and Gondolas,CF739E Gosha is hun ...

  8. 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)

    洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...

  9. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)

    惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...

最新文章

  1. C++ unique
  2. iOS开发 - UITextView输入时高度自适应
  3. 教你成为全栈工程师(Full Stack Developer) 〇-什么是全栈工程师
  4. eclipse java 运行快捷键_java – 可以使用Eclipse中的键盘快捷方式启动/停止Tomcat吗?...
  5. Linux和window下tomcat虚拟路径的配置方式
  6. mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
  7. P4300-[AHOI2006]上学路线【网络流,最短路】
  8. webpack打包后的文件夹是空的_vue+webpack 打包文件 404 页面空白的解决方法
  9. SAP HANA Cloud Connector图文全攻略
  10. Android Dialog的简单说明
  11. 计算机窗口保护颜色,如何设置电脑保护色,教你设置电脑保护色
  12. 关于假人皮肤外侧热传导问题的差分法求解
  13. javaweb实现即时消息推送功能
  14. C语言读取wav文件中特定内容6,c读取wav文件,头文件后面的所有数据
  15. 新手做shopee平台,出单后不会发货,我来为你解疑
  16. [转]详细说明等额本金和等额本息的计算方式与利弊
  17. 棋牌游戏开发会low吗 中国棋牌文化底蕴探究
  18. 螺吡喃/聚丙烯酸丁酯/聚丙烯酸丁酯和螺吡喃/聚丙烯酸丁酯/聚丙烯酸甲酯双重网络弹性体的应变-应力曲线
  19. python爬虫实战三:近十年中国电影票房数据爬取与分析
  20. 结构、流体、热分析、多物理场耦合、电磁仿真硬件配置推荐2018

热门文章

  1. 元胞自动机模型_【ABM仿真模拟】第三章 元胞自动机 B
  2. centos 新装mysql 进入,centos5安装 mysql 提示需要用户及密码进入?Duplicate entry 'localhost-' for key 1...
  3. 计算机语言平均数怎么算,使用python怎么求三个数的平均值
  4. typora插入代码设置_Typora基本功能介绍
  5. java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
  6. mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据
  7. python绘制蟒蛇绕圈圈_Python学习之循环--绕圈圈(蛇形盘)
  8. tensorflow打印模型图_从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)...
  9. Java手写HashSet
  10. [JavaWeb]Web概念概述