P4983-忘情【wqs二分,斜率优化】
正题
题目链接: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=lrxi×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=lrxi+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(nlogW)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二分,斜率优化】相关推荐
- P4383 [八省联考2018]林克卡特树(树形dp+wqs二分)
[八省联考2018]林克卡特树 题目大意:给定一棵有负权边的树,现在必须恰好删去 k k k条边,并加上恰好 k k k条权值为 0 0 0的边,要求最大化它的直径长度. 首先考虑删去 K K K条边 ...
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
$ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...
- jzoj3169-[GDOI2013模拟4]生产汽车【斜率优化dp,单调队列,二分】
正题 题目大意 有nnn个人mmm辆车. 人有tit_iti,车有fjf_jfj.第i个人修第j俩车时间是ti∗fjt_i*f_jti∗fj. 一辆车要每个人都修一遍,且一个人修好后要求下一个 ...
- BZOJ1767/Gym207383I CEOI2009 Harbingers 斜率优化、可持久化单调栈、二分
传送门--BZOJCH 传送门--VJ 注:本题在BZOJ上是权限题,在Gym里面也不能直接看,所以只能在VJ上交了-- 不难考虑到这是一个\(dp\). 设\(dep_x\)表示\(x\)在树上的带 ...
- 洛谷P4383 [八省联考2018]林克卡特树lct(DP凸优化/wqs二分)
题目描述 小L 最近沉迷于塞尔达传说:荒野之息(The Legend of Zelda: Breath of The Wild)无法自拔,他尤其喜欢游戏中的迷你挑战. 游戏中有一个叫做"LC ...
- P3994 高速公路 树形DP+斜率优化+二分
$ \color{#0066ff}{ 题目描述 }$ C国拥有一张四通八达的高速公路网树,其中有n个城市,城市之间由一共n-1条高速公路连接.除了首都1号城市,每个城市都有一家本地的客运公司,可以发车 ...
- [学习笔记]dp凸优化/wqs二分[八省联考2018]林克卡特树lct
废话 很早就想学wqs二分,结果拖了好久.因为以前是看了几遍都没有懂..(太菜了 后来因为计划里凸优化的题(比如CF321E Ciel and Gondolas,CF739E Gosha is hun ...
- 洛谷P4072 [SDOI2016]征途(带权二分,斜率优化)
洛谷题目传送门 一开始肯定要把题目要求的式子给写出来 我们知道方差的公式\(s^2=\frac{\sum\limits_{i=1}^{m}(x_i-\overline x)^2}{m}\) 题目要乘\ ...
- BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)
惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...
最新文章
- C++ unique
- iOS开发 - UITextView输入时高度自适应
- 教你成为全栈工程师(Full Stack Developer) 〇-什么是全栈工程师
- eclipse java 运行快捷键_java – 可以使用Eclipse中的键盘快捷方式启动/停止Tomcat吗?...
- Linux和window下tomcat虚拟路径的配置方式
- mysql done_MySQL 获取游标结果报错:1193-Unknown system variable ‘done’
- P4300-[AHOI2006]上学路线【网络流,最短路】
- webpack打包后的文件夹是空的_vue+webpack 打包文件 404 页面空白的解决方法
- SAP HANA Cloud Connector图文全攻略
- Android Dialog的简单说明
- 计算机窗口保护颜色,如何设置电脑保护色,教你设置电脑保护色
- 关于假人皮肤外侧热传导问题的差分法求解
- javaweb实现即时消息推送功能
- C语言读取wav文件中特定内容6,c读取wav文件,头文件后面的所有数据
- 新手做shopee平台,出单后不会发货,我来为你解疑
- [转]详细说明等额本金和等额本息的计算方式与利弊
- 棋牌游戏开发会low吗 中国棋牌文化底蕴探究
- 螺吡喃/聚丙烯酸丁酯/聚丙烯酸丁酯和螺吡喃/聚丙烯酸丁酯/聚丙烯酸甲酯双重网络弹性体的应变-应力曲线
- python爬虫实战三:近十年中国电影票房数据爬取与分析
- 结构、流体、热分析、多物理场耦合、电磁仿真硬件配置推荐2018
热门文章
- 元胞自动机模型_【ABM仿真模拟】第三章 元胞自动机 B
- centos 新装mysql 进入,centos5安装 mysql 提示需要用户及密码进入?Duplicate entry 'localhost-' for key 1...
- 计算机语言平均数怎么算,使用python怎么求三个数的平均值
- typora插入代码设置_Typora基本功能介绍
- java二叉树的深度优先遍历_二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式...
- mysql+误操作怎么恢复_MySQL 误操作后如何快速恢复数据
- python绘制蟒蛇绕圈圈_Python学习之循环--绕圈圈(蛇形盘)
- tensorflow打印模型图_从Tensorflow模型文件中解析并显示网络结构图(pb模型篇)...
- Java手写HashSet
- [JavaWeb]Web概念概述