Description

Link.

给出一个数列,要求将其分成几段,使每段的和非严格递增,求最小的每段的和的平方和。

Solution

注意到 \(a_{i}\) 为正,对于正数有这样的结论:

\[a^{2}+b^{2}<(a+b)^{2}
\]

正确性显然。这告诉我们,分的段越多越好。

现在我们来考虑如何使每段的和非严格递增。

考虑暴力 DP,设 \(f_{i,j}\) 为前 \(i\) 个数然后上一个 breakpoint 是 \(j\)​ 的最小平方和,转移:

\[f_{i,j}=\min_{1\le k<j,pre_{i}-pre_{j}\ge pre_{j}-pre_{k}}\{f_{j,k}+(pre_{i}-pre_{j})^{2}\}
\]

\(pre\) 为前缀和。当然这个 DP 什么结论都没用,没有任何技术含量。

所以我们考虑优化。

你会发现这个 \(k\) 不是每次都要重头枚举,他是单调的,于是你维护 \(f_{j,k}\) 最小值即可,复杂度变成了 \(\mathcal{O}(n^{2})\)。

考虑上面的结论,你会发现我们只需要找打第一个可行的转移点 \(k\) 即可。

意味着我们可以维护一个 \(g_{i}\) 来表示:前 \(i\) 个数,我们最大的一个合法 \(k\)。这个东西肯定是单调不降的。

转移即:

\[g_{i}=\max_{pre_{i}-pre{j}\ge pre_{j}-pre_{g_{j}}}\{j\}
\]

变形得:

\[g_{i}=\max_{pre_{i}\ge pre_{j}\times2-pre_{g_{j}}}\{j\}
\]

显然判定条件的右边有单调性(\(pre_{j}+(pre_{j}-pre_{g_{j}})\)),左边也有单调性。

然后单调队列优化即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef __int128 _LL;
int n,a[40000010],taskID,f[40000010],que[40000010],head,tail;
LL pre[40000010];
_LL ans;
template<typename T>
void read(T &hhh)
{
T x=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^'0'),c=getchar();
if(~f) hhh=x;
else hhh=-x;
}
template<typename T>
void write(T x,char las='\n')
{
static int stk[100],top=0,f=0;
if(x<0) x=-x,f=1;
do stk[++top]=x%10,x/=10; while(x);
if(f) putchar('-');
while(top) putchar(stk[top--]^'0');
putchar(las);
}
void generateData(int taskID)
{
if(taskID) for(int i=1;i<=n;++i) read(a[i]);
else
{
static int p[100010],l[100010],r[100010],b[40000010];
LL x,y,z;
int m;
read(x),read(y),read(z),read(b[1]),read(b[2]),read(m);
const int MOD=(1<<30);
for(int i=1;i<=m;++i) read(p[i]),read(l[i]),read(r[i]);
for(int i=3;i<=n;++i) b[i]=(LL(x)*b[i-1]%MOD+LL(y)*b[i-2]%MOD+z)%MOD;
for(int j=1;j<=m;++j)
{
for(int i=p[j-1]+1;i<=p[j];++i) a[i]=(b[i]%(r[j]-l[j]+1))+l[j];
}
}
for(int i=1;i<=n;++i) pre[i]=pre[i-1]+a[i];
}
int main()
{
read(n),read(taskID);
generateData(taskID^1);
for(int i=1;i<=n;++i)
{
while(head<tail&&pre[i]>=(pre[que[head+1]]<<1)-pre[f[que[head+1]]]) ++head;
f[i]=que[head];
while(head<tail&&(pre[i]<<1)-pre[f[i]]<=(pre[que[tail]]<<1)-pre[f[que[tail]]]) --tail;
que[++tail]=i;
}
for(int i=n;i;i=f[i]) ans+=_LL(pre[i]-pre[f[i]])*(pre[i]-pre[f[i]]);
write(ans);
return 0;
}

Solution -「CSP 2019」Partition的更多相关文章

  1. Solution -「CTS 2019」「洛谷 P5404」氪金手游

    \(\mathcal{Description}\)   Link.   有 \(n\) 张卡牌,第 \(i\) 张的权值 \(w_i\in\{1,2,3\}\),且取值为 \(k\) 的概率正比于 \ ...

  2. Solution -「JSOI 2019」「洛谷 P5334」节日庆典

    \(\mathscr{Description}\)   Link.   给定字符串 \(S\),求 \(S\) 的每个前缀的最小表示法起始下标(若有多个,取最小的).   \(|S|\le3\time ...

  3. Solution -「CCO 2019」「洛谷 P5532」Sirtet

    \(\mathcal{Description}\)   Link.   在一个 \(n\times m\) 的网格图中,每个格子上是空白 . 或沙子 #,四联通的沙子会连成一个整体.令此时所有沙子块同 ...

  4. Solution -「ZJOI 2019」「洛谷 P5326」开关

    \(\mathcal{Description}\)   Link.   有 \(n\) 个开关,初始时所有开关的状态为 \(0\).给定开关的目标状态 \(s_1,s_2,\cdots,s_n\).每 ...

  5. Solution -「JOISC 2019」「LOJ #3036」指定城市

    \(\mathcal{Description}\)   Link.   给定一棵含 \(n\) 个结点的树,双向边权不相同.\(q\) 次询问,每次询问在树上标记 \(e\) 个点,标记的价值为所有趋 ...

  6. Solution -「ROI 2019」「LOJ #3192」课桌

    \(\mathcal{Description}\)   Link.   原题意足够简洁啦.( \(\mathcal{Solution}\)   乍一看比较棘手,但可以从座位的安排方式入手,有结论:   ...

  7. Solution -「HNOI 2019」「洛谷 P5293」白兔之舞

    \(\mathcal{Description}\)   Link.   不想概括题意.jpg \(\mathcal{Solution}\)   定义点集 \(S_c=\{(u,v)|v=c\}\):第 ...

  8. 「WC 2019」数树

    「WC 2019」数树 一道涨姿势的EGF好题,官方题解我并没有完全看懂,尝试用指数型生成函数和组合意义的角度推了一波.考场上只得了 44 分也暴露了我在数数的一些基本套路上的不足,后面的 \(\ex ...

  9. LOJ#3054. 「HNOI 2019」鱼

    LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...

  10. #3146. 「APIO 2019」路灯

    #3146. 「APIO 2019」路灯 题目描述 一辆自动驾驶的出租车正在 Innopolis 的街道上行驶.该街道上有 \(n + 1\) 个停车站点,它们将街道划分成了 \(n\) 条路段.每一 ...

随机推荐

  1. 在技术圈混,不知道这些你就 OUT 了

    技术之路就是漫长的打怪升级,不断学习前人的踩坑经验才能提升自己,切忌闭门造车.所谓独乐乐不如众乐乐,强烈推荐以下公众号,让你的生活多点意思,希望小伙伴们能在 coding 的路上走的更远. OSC开源 ...

  2. 南洋才女,德艺双馨,孙燕姿本尊回应AI孙燕姿(基于Sadtalker/Python3.10)

    孙燕姿果然不愧是孙燕姿,不愧为南洋理工大学的高材生,近日她在个人官方媒体博客上写了一篇英文版的长文,正式回应现在满城风雨的"AI孙燕姿"现象,流行天后展示了超人一等的智识水平,行文 ...

  3. WWDC2023 Session系列:探索XCode15新特性

    一.版本说明 XCode 15 beta 发布于 2023 年 6月5日, 可支持 macOS 13.3 或以上版本, 你可以按需下载需要的平台. 二.新增特性 1.代码智能提示 (Code comp ...

  4. 轻松掌握Python+主流测试框架Requests接口自动化,快速转型自动化测试

    轻松掌握Python+主流测试框架Requests接口自动化,快速转型自动化测试 最近几年,自动化测试已经成为了软件测试的主流趋势,而Python语言和Requests库作为主流测试框架,也成为了越来 ...

  5. C# 图片转PDF,PDF增加水印文字

    好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧. 首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实 ...

  6. JetBrain学信网注册(Clion)

    一.打开网站 首先打开JetBrains关于学生认证的网站:https://www.jetbrains.com/shop/eform/students,可以看见以下页面: 二.人工验证 人工验证适合于 ...

  7. Android实时获取摄像头画面传输至PC端

    前言 最近在做一个PC端小应用,需要获取摄像头画面,但是电脑摄像头像素太低,而且位置调整不方便,又不想为此单独买个摄像头.于是想起了之前淘汰掉的手机,成像质量还是杠杠的,能不能把手机摄像头连接到电脑上 ...

  8. 2023-07-19:布尔表达式 是计算结果不是 true 就是 false 的表达式 有效的表达式需遵循以下约定: ‘t‘,运算结果为 true ‘f‘,运算结果为 false ‘!(subExpr

    2023-07-19:布尔表达式 是计算结果不是 true 就是 false 的表达式 有效的表达式需遵循以下约定: 't',运算结果为 true 'f',运算结果为 false '!(subExpr ...

  9. TodoList - 开源研究系列文章

    接着上次的代码,整理出一个待办列表的程序,比较简单易用,读者可自行修改成自己需要的程序. 1.        项目目录: 目录见下图,对代码进行了划分,比较简单.主处理类在Helper目录里. 2.  ...

  10. 信奥赛题1001:Hello,World!

    这个题实在是太简单的了,无法比喻,直接付代码! //c++ #include<bits/stdc++.h> using namespace std; int main() { cout&l ...