暴力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]划分的更多相关文章

  1. [LeetCode] Partition List 划分链表

    Given a linked list and a value x, partition it such that all nodes less than x come before nodes gr ...

  2. SWMM模型子汇水区划分的几种方法

    子汇水区的划分是SWMM模型建模的主要步骤之一,划分的好坏对结果精度有比较大的影响.概括来讲,子汇水区的划分有以下几种思路: (1)根据管网走向.建筑物和街道分布,直接人工划分子汇水区.这个方法适用于 ...

  3. 等价类划分方法的应用(jsp)

    [问题描述] 在三个文本框中输入字符串,要求均为1到6个英文字符或数字,按submit提交. [划分等价类] 条件1: 字符合法; 条件2: 输入1长度合法; 条件3: 输入2长度合法: 条件4: 输 ...

  4. Java上等价类划分测试的实现

    利用JavaFx实现对有效等价类和无效等价类的划分: 代码: import javafx.application.Application;import javafx.event.ActionEvent ...

  5. ENode框架Conference案例分析系列之 - 上下文划分和领域建模

    前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...

  6. Cesium原理篇:2最长的一帧之网格划分

    上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...

  7. 两种交换机配置模式,以配置基于端口划分的VLAN为例

    关于交换机的配置模式,大体上可以分为两类:其一以CISCO交换机为代表的配置模式,其二以Huawei.H3C交换机为代表的配置模式.其实这两种配置模式并没有本质的不同,只是配置的命令名称和配置方式存在 ...

  8. tyvj1194 划分大理石

    描述 有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现.其中大理石的总数不超过20000.  输入格式 有多组数据!所以可能有多行如果有0  ...

  9. tyvj1102 单词的划分

    描述 有一个很长的由小写字母组成字符串.为了便于对这个字符串进行分析,需要将它划分成若干个部分,每个部分称为一个单词.出于减少分析量的目的,我们希望划分出的单词数越少越好.你就是来完成这一划分工作的. ...

随机推荐

  1. HC(Histogram-based Contrast) 基于直方图对比度的显著性

    HC(Histogram-based Contrast) 基于直方图对比度的显著性 来源于: 2011, Global contrast based salient region detection, ...

  2. hexo访问优化之--------gulp压缩

    hexo访问优化之--------gulp压缩 hexo生成的博客是静态html页面,当有很多静态资源时,加载速度会非常慢,且github服务器在国外,导致网页加载速度非常差 gulp压缩 gulp是 ...

  3. Java基础之(七):Scanner对象

    用户交互Scanner Scanner对象 调用java.util.Scanner 可以通过Scanner类来获取用户的输入 基本语法: Scanner scanner = new Scanner(S ...

  4. Docker 常见命令

    Docker 运行流程 辅助命令 # 1.安装完成辅助命令 docker version -------------------------- 查看docker的信息 docker info ---- ...

  5. 【转】简述C和C++的学习历程

    简述C和C++的学习历程(转) --by:肖舸老师总是被同学们问到,如何学习C和C++才不茫然,才不是乱学,想了一下,这里给出一个总的回复. 一家之言,欢迎拍砖哈. 1.可以考虑先学习C. 大多数时候 ...

  6. Codeforces Round #747 (Div. 2) Editorial

    Codeforces Round #747 (Div. 2) A. Consecutive Sum Riddle 思路分析: 一开始想起了那个公式\(l + (l + 1) + - + (r − 1) ...

  7. GitHub Universe 2021|MS Reactor 邀你共聚年度盛会

    GitHub Universe 2021 将于2021年10月27-28日(PDT)在线直播,MS Reactor 将与 CSDN 合作进行转播,与你一同观看这场全球开发者盛会. 关于 GitHub ...

  8. JavaAgent型内存马基础

    Java Instrumentation ​ java Instrumentation指的是可以用独立于应用程序之外的代理(agent)程序来监测和协助运行在JVM上的应用程序.这种监测和协助包括但不 ...

  9. 【Azure Redis 缓存】Windows版创建 Redis Cluster 实验 (精简版)

    简介 学习Redis Cluster的第一步,即本地搭建Redis Cluster.但是在Redis的官方文档中,是介绍在Linux系统中搭建Redis Cluster.本文主要介绍在Windows系 ...

  10. Linux线程互斥学习笔记--详细分析

    一.互斥锁 为啥要有互斥? 多个进程/线程执行的先后顺序不确定,何时切出CPU也不确定. 多个进程/线程访问变量的动作往往不是原子的. 1. 操作步骤 (1)创建锁 // 创建互斥锁mutex pth ...