【LOJ】#2035. 「SDOI2016」征途
题解
有人管它叫带权二分,有人管它叫dp凸优化,有人管它叫wqs二分……
延伸出来还有zgl分治,xjp¥!%#!@#¥!#
当我没说
我们拆个式子,很容易发现所求的就是
\(m\sum_{i = 1}^{m}s_{i}^2 - sum^{2}\)
然后去掉常数我们只要求\(\sum_{i = 1}^{m}s_{i}^2\)的最小值
然而,我们需要m个?
我们发现,这个东西随着选的个数增多,越来越少,并且少得越来越慢(斜率变大,斜率是负的!)
我们二分最后一次的斜率,选一次减少q,最后能取到的最小值用了几天,如果恰好等于m那么就是我们需要的,这个dp显然就是用斜率优化一下就OK了
当然,我们很可能出现,m = 4,前一个二分到最小值天数为3,再 + 1就变成最小值天数为5了= =,事实上二分的边界再多一个左右斜率相等就行了
代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <map>
//#define ivorysi
#define pb push_back
#define space putchar(' ')
#define enter putchar('\n')
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define mo 974711
#define MAXN 3005
#define RG register
using namespace std;
typedef long long int64;
typedef double db;
template<class T>
void read(T &res) {
res = 0;char c = getchar();T f = 1;
while(c < '0' || c > '9') {
if(c == '-') f = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
res = res * 10 + c - '0';
c = getchar();
}
res *= f;
}
template<class T>
void out(T x) {
if(x < 0) {putchar('-');x = -x;}
if(x >= 10) {
out(x / 10);
}
putchar('0' + x % 10);
}
int N,M,que[MAXN],ql,qr,cnt[MAXN];
int64 S[MAXN],dp[MAXN],V,X[MAXN],Y[MAXN];
int calc(int a,int b) {
return dp[a] + (S[b] - S[a]) * (S[b] - S[a]) - V;
}
bool slope(int a,int b,int c) {
return (X[c] - X[a]) * (Y[b] - Y[a]) - (X[b] - X[a]) * (Y[c] - Y[a]) >= 0;
}
int Check(int64 mid) {
V = mid;
ql = 1,qr = 1;
cnt[0] = 0;dp[0] = 0;
que[1] = 0;
for(int i = 1 ; i <= N ; ++i) {
while(ql < qr) {
if(calc(que[ql],i) > calc(que[ql + 1],i)) ++ql;
else break;
}
dp[i] = calc(que[ql],i);cnt[i] = cnt[que[ql]] + 1;
X[i] = S[i];Y[i] = dp[i] + S[i] * S[i];
while(ql < qr) {
if(slope(que[qr - 1],que[qr],i)) --qr;
else break;
}
que[++qr] = i;
}
return cnt[N];
}
void Solve() {
read(N);read(M);
for(int i = 1 ; i <= N ; ++i) read(S[i]);
for(int i = 1 ; i <= N ; ++i) S[i] += S[i - 1];
int64 L = -1000000000,R = 1000000000;
while(L <= R) {
int64 MID = (L + R + 1) >> 1;
int x = Check(MID);
if(x == M || L == R) {
int64 ans = M * (dp[N] + MID * M) - S[N] * S[N];
out(ans);enter;return;
}
if(x > M) R = MID - 1;
else L = MID;
}
}
int main() {
#ifdef ivorysi
freopen("f1.in","r",stdin);
#endif
Solve();
return 0;
}
【LOJ】#2035. 「SDOI2016」征途的更多相关文章
- [LOJ 2070] 「SDOI2016」平凡的骰子
[LOJ 2070] 「SDOI2016」平凡的骰子 [题目链接] 链接 [题解] 原题求的是球面面积 可以理解为首先求多面体重心,然后算球面多边形的面积 求重心需要将多面体进行四面体剖分,从而计算出 ...
- 「SDOI2016」征途 题解
「SDOI2016」征途 先浅浅复制一个方差 显然dp,可以搞一个 \(dp[i][j]\)为前i段路程j天到达的最小方差 开始暴力转移 \(dp[i][j]=min(dp[k][j-1]+?)(j- ...
- 「SDOI2016」征途
征途 Pine开始了从S地到T地的征途. 从S地到T地的路可以划分成\(n\)段,相邻两段路的分界点设有休息站. Pine计划用\(m\)天到达T地.除第\(m\)天外,每一天晚上Pine都必须在休息 ...
- LOJ#2070. 「SDOI2016」平凡的骰子(计算几何)
题面 传送门 做一道题学一堆东西不管什么时候都是美好的体验呢-- 前置芝士 混合积 对于三个三维向量\(a,b,c\),定义它们的混合积为\((a\times b)\cdot c\),其中$\time ...
- loj2035 「SDOI2016」征途
学了斜率优化这题就能一气呵成地做出来啦qwqqwq #include <iostream> #include <cstdio> using namespace std; typ ...
- Loj #2192. 「SHOI2014」概率充电器
Loj #2192. 「SHOI2014」概率充电器 题目描述 著名的电子产品品牌 SHOI 刚刚发布了引领世界潮流的下一代电子产品--概率充电器: 「采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- Loj #3096. 「SNOI2019」数论
Loj #3096. 「SNOI2019」数论 题目描述 给出正整数 \(P, Q, T\),大小为 \(n\) 的整数集 \(A\) 和大小为 \(m\) 的整数集 \(B\),请你求出: \[ \ ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- Loj #3089. 「BJOI2019」奥术神杖
Loj #3089. 「BJOI2019」奥术神杖 题目描述 Bezorath 大陆抵抗地灾军团入侵的战争进入了僵持的阶段,世世代代生活在 Bezorath 这片大陆的精灵们开始寻找远古时代诸神遗留的 ...
随机推荐
- Hadoop生态圈-hive编写自定义函数
Hadoop生态圈-hive编写自定义函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- python---django的模块简便使用
一:登录操作 from django.contrib.auth import authenticate,login,logout #可以用来做登录验证 from django.contrib.auth ...
- 让你快速学会Shell脚本
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合.Shell可以直接使用在win/Unix/Linux上面, ...
- 流媒体技术学习笔记之(十六)H264编码profile & level控制
H.264有四种画质级别,分别是baseline, extended, main, high: 1.Baseline Profile:基本画质.支持I/P 帧,只支持无交错(Progressive)和 ...
- centos7 源码构建、安装dubbo-monitor
按照官方文档 ,发现dubbo-monitor-simple-x.x.x-assembly.tar.gz 下载不下来(地址访问不了),那么就自己下载源码构建吧. 我的zookeeper,hadoop ...
- [转载]WCF和ASP.NET Web API在应用上的选择
http://www.cnblogs.com/shanyou/archive/2012/09/26/2704814.html http://msdn.microsoft.com/en-us/libra ...
- jQuery精仿手机上的翻牌效果菜单
代码简介: jQuery精仿手机上的翻牌效果菜单,很平滑的动画翻牌效果,每点击一下菜单,就会翻去一下,貌似很灵敏的动作.注意:如果预览时没看到效果,请刷新一下页面,让jquery载入就行了,在实际使用 ...
- springboot中使用Scheduled定时任务
一:在程序入口类中添加注解@EnableScheduling @SpringBootApplication @EnableScheduling public class DemoApplication ...
- 训练赛第二场G题 ZOJ 2343
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2343 解题报告:首先我假设最后的正确的结果是a[1] , a[2 ...
- 【leetcode 简单】 第五十九题 同构字符串
给定两个字符串 s 和 t,判断它们是否是同构的. 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的. 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序.两个字符不能映射到同一 ...