[luogu5665]划分
暴力dp,用f[i][j]表示前i个数,最后一个区间是(j,i]的最小答案,转移方程用可以用前缀和来优化,复杂度为$o(n^3)$
(然后可以各种优化到$o(n^2)$,但这不需要)
输出f[i][j],可以发现若f[i][j-1]和f[i][j]合法,那么$f[i][j]\le f[i][j-1]$
证明:数归,考虑令f[i][j]和f[i][j-1]都合法,设f[i][j-1]由f[j-1][k]转移,f[i][j]由f[i][k']转移,必然有$k\le k'$,即在左边可以删掉若干个数(可以为0个)来保证合法
按照这样的策略划分f[i][j-1],设划分出的区间和分别是$S1\le S2\le ……\le St$,然后分别在左边删除Li,右边加入Ri,显然有$L1=Rt=0$且$R_{i-1}=Li$,那么区间和从$\sum_{i=1}^{t}Si^{2}$变成$\sum_{i=1}^{t}(Si+Ri-Li)^2=\sum_{i=1}^{t}Si^2+\sum_{i=1}^{t}(Ri-R_{i-1})^{2}+2\sum_{i=1}^{t}Si(Ri-R_{i-1})\le \sum_{i=1}^{t}Si^2+2\sum_{i=1}^{t}Ri(Si-S_{i-1})\le \sum_{i=1}^{t}Si^2$
通过证明,同时也可以得到最优方案如何构造,用优先队列来维护出最后一个合法的,然后从n往前选择即可
考场上需要写高精度(比较懒就用__int128了)

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mod (1<<30)
4 #define N 40000007
5 #define ll long long
6 #define lll __int128
7 int n,type,m,x,y,z,q[N],f[N],b[N];
8 ll ans,a[N];
9 ll calc(int k){
10 return 2*a[k]-a[f[k]];
11 }
12 void write(lll k){
13 if (k>9)write(k/10);
14 putchar(k%10+'0');
15 }
16 int main(){
17 scanf("%d%d",&n,&type);
18 if (!type)
19 for(int i=1;i<=n;i++){
20 scanf("%d",&x);
21 a[i]=a[i-1]+x;
22 }
23 else{
24 scanf("%d%d%d%d%d%d",&x,&y,&z,&b[1],&b[2],&m);
25 for(int i=3;i<=n;i++)b[i]=(1LL*x*b[i-1]+1LL*y*b[i-2]+z)%mod;
26 int xx=1;
27 for(int i=1;i<=m;i++){
28 scanf("%d%d%d",&x,&y,&z);
29 for(int j=xx;j<=x;j++)a[j]=a[j-1]+b[j]%(z-y+1)+y;
30 xx=x+1;
31 }
32 }
33 x=1;
34 y=0;
35 for(int i=1;i<=n;i++){
36 while ((x<=y)&&(calc(q[x])<=a[i]))x++;
37 f[i]=q[x-1];
38 while ((x<=y)&&(calc(q[y])>=calc(i)))y--;
39 q[++y]=i;
40 }
41 lll ans=0,o=1;
42 for(int i=n;i;i=f[i])ans+=o*(a[i]-a[f[i]])*(a[i]-a[f[i]]);
43 write(ans);
44 }
[luogu5665]划分的更多相关文章
- [LeetCode] Partition List 划分链表
Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...
- SWMM模型子汇水区划分的几种方法
子汇水区的划分是SWMM模型建模的主要步骤之一,划分的好坏对结果精度有比较大的影响.概括来讲,子汇水区的划分有以下几种思路: (1)根据管网走向.建筑物和街道分布,直接人工划分子汇水区.这个方法适用于 ...
- 等价类划分方法的应用(jsp)
[问题描述] 在三个文本框中输入字符串,要求均为1到6个英文字符或数字,按submit提交. [划分等价类] 条件1: 字符合法; 条件2: 输入1长度合法; 条件3: 输入2长度合法: 条件4: 输 ...
- Java上等价类划分测试的实现
利用JavaFx实现对有效等价类和无效等价类的划分: 代码: import javafx.application.Application;import javafx.event.ActionEvent ...
- ENode框架Conference案例分析系列之 - 上下文划分和领域建模
前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...
- Cesium原理篇:2最长的一帧之网格划分
上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...
- 两种交换机配置模式,以配置基于端口划分的VLAN为例
关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...
- tyvj1194 划分大理石
描述 有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现.其中大理石的总数不超过20000. 输入格式 有多组数据!所以可能有多行如果有0 ...
- tyvj1102 单词的划分
描述 有一个很长的由小写字母组成字符串.为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词.出于减少分析量的目的,我们希望划分出的单词数越少越好.你就是来完成这一划分工作的. ...
随机推荐
- 易华录 X ShardingSphere|葫芦 App 后台数据处理的逻辑捷径
"ShardingSphere 大大简化了分库分表的开发和维护工作,对于业务的快速上线起到了非常大的支撑作用,保守估计 ShardingSphere 至少为我们节省了 4 个月的研发成本.& ...
- bzoj5210最大连通子块和 (动态dp+卡常好题)
卡了一晚上,经历了被卡空间,被卡T,被卡数组等一堆惨惨的事情之后,终于在各位大爹的帮助下过了这个题qwqqq (全网都没有用矩阵转移的动态dp,让我很慌张) 首先,我们先考虑一个比较基础的\(dp\) ...
- 激活NX窗口的按钮
原理:取得按钮名称以后,通过运行宏文件激活按钮 Imports System.IO Imports System.Runtime.InteropServices Imports NXOpen.Menu ...
- 图解Redis6中的9种数据结构,墙裂建议准备去面试的人先看(干货,建议收藏)
如图所示,Redis中提供了9种不同的数据操作类型,他们分别代表了不同的数据存储结构. 图2-17 数据类型 String类型 String类型是Redis用的较多的一个基本类型,也是最简单的一种类型 ...
- 【技术博客】在Unity3d中实现烟花效果
在游戏开发中,我们经常需要用到类似烟花的效果.在Unity3d中,实现烟花效果的方法不止一种,我选用了Unity3d中新添加的粒子特效工具--visual effect graph来进行实现. 实现过 ...
- [技术博客] Django中文件的保存与访问
[技术博客] Django中文件的保存与访问 在TextMarking项目开发中,数据库需要保存用户上传的文本文档. 原型设计:用户点击上传文本->保存文本->文本发送到后端保存为文件. ...
- CSP-S2021幽寂
不管怎么说,这次比赛考的比这一段时间以来的模拟赛都难看 难受,但是也不想太表现出来,所以更难受.... 有点害怕会退役...... Day -6 前一天晚上回宿舍的时候和\(zxs\)一路,聊的过程中 ...
- 数据流中的中位数 牛客网 剑指Offer
数据流中的中位数 牛客网 剑指Offer 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就 ...
- BQ40Z50固件怎么升级?告诉你BQ系列芯片内部结构和升级方法
一 BQ芯片初步认识 包括BQ40Z50在内,BQ系列电池管理芯片看起来是一个芯片,其实芯片里面封装了两个die.一个是MCU部分负责计算和控制,其采用的是bqBMP内核的16位处理器:另外一个die ...
- oracle 数据库修改端口号1521
1.关闭监听 2.修改配置文件,port=1933 #vi $ORACLE_HOME/network/admin/listener.ora 3.登录并查看local_listener参数,因为使用的是 ...