【JZOJ6434】【luoguP5665】【CSP-S2019】划分
description


analysis
首先有一个结论,对于\([1,i]\)区间划分最后一段的和尽量小,答案会更优,具体证明参考毛爷爷的博客
设\(f[i]\)为满足\([1,i]\)划分最优时、\((f[i],i]\)这段和最小时的最右的端点,最优划分即为从\(n\)开始向\(f\)不断统计
由后一段比前一段大可知\(sum[f[i]]-sum[f[f[i]]]≤sum[i]-sum[f[i]]\),即\(sum[i]≥2sum[f[i]]-sum[f[f[i]]]\)
右边只和\(f[i]\)有关,把右边的记为\(clac(f[i])\),于是可以维护一个\(clac\)值上升的单调队列来求出每一位的\(f\)
具体维护就是,队头不断出队直到\(sum[i]<clac(q[head])\)(因为\(f[i]\)要尽可能大),\(f[i]\)赋为队头
若\(clac(i)≤clac(q[tail])\)队尾再不断出队(因为\(clac(i)\)更小且\(i\)更靠右),最后\(i\)进队,就完成了队列的维护
code
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 40000005
#define ha 1073741824
#define ll long long
#define LL __int128
#define reg register int
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
using namespace std;
int p[100005],l[100005],r[100005];
int f[MAXN],q[MAXN];
ll b[MAXN],sum[MAXN];
int n,type;
inline int read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline ll clac(ll x){return 2*sum[x]-sum[f[x]];}
inline void print(LL x)
{
int num[55];num[0]=0;
while (x)num[++num[0]]=x%10,x/=10;
while (num[0])printf("%d",num[num[0]--]);
printf("\n");
}
int main()
{
n=read(),type=read();
if (type)
{
int x=read(),y=read(),z=read();b[1]=read(),b[2]=read();int m=read(),now=1;
fo(i,1,m)p[i]=read(),l[i]=read(),r[i]=read();
fo(i,3,n)b[i]=(x*b[i-1]%ha+y*b[i-2]%ha+z)%ha;
fo(i,1,n)
{
if (i>p[now])++now;
sum[i]=sum[i-1]+(b[i]%(r[now]-l[now]+1))+l[now];
}
}
else {fo(i,1,n)sum[i]=sum[i-1]+read();}
int head=0,tail=0;
fo(i,1,n)
{
while (head<tail && sum[i]>=clac(q[head+1]))++head;
f[i]=q[head];
while (head<tail && clac(i)<=clac(q[tail]))--tail;
q[++tail]=i;
}
LL ans=0;
for (reg i=n;i;i=f[i])ans+=(LL)(sum[i]-sum[f[i]])*(sum[i]-sum[f[i]]);
print(ans);
return 0;
}
【JZOJ6434】【luoguP5665】【CSP-S2019】划分的更多相关文章
- CCF CSP 201612-2 工资计算
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201612-2 工资计算 问题描述 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所 ...
- 【CSP-S 2019】【洛谷P5665】划分【单调队列dp】
前言 \(csp\)时发现自己做过类似这道题的题目 : P4954 [USACO09Open] Tower of Hay 干草塔 然后回忆了差不多\(15min\)才想出来... 然后就敲了\(88p ...
- xss之上传文件的xss,绕过csp,预警机制
xss1.XSS姿势——文件上传XSS https://wooyun.x10sec.org/static/drops/tips-14915.html总结: 1.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 ...
- SWMM模型子汇水区划分的几种方法
子汇水区的划分是SWMM模型建模的主要步骤之一,划分的好坏对结果精度有比较大的影响.概括来讲,子汇水区的划分有以下几种思路: (1)根据管网走向.建筑物和街道分布,直接人工划分子汇水区.这个方法适用于 ...
- 等价类划分方法的应用(jsp)
[问题描述] 在三个文本框中输入字符串,要求均为1到6个英文字符或数字,按submit提交. [划分等价类] 条件1: 字符合法; 条件2: 输入1长度合法; 条件3: 输入2长度合法: 条件4: 输 ...
- Java上等价类划分测试的实现
利用JavaFx实现对有效等价类和无效等价类的划分: 代码: import javafx.application.Application;import javafx.event.ActionEvent ...
- CSP的今世与未来
一.从两个工具说起 最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框 ...
- ENode框架Conference案例分析系列之 - 上下文划分和领域建模
前面一片文章,我介绍了Conference案例的核心业务,为了方便后面的分析,我这里再列一下: 业务描述 Conference是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...
随机推荐
- jquery 弹出框效果
html <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <ti ...
- poj 2104 无修改主席树
题目大意: 求序列的区间第k大 基本思路: 因为我根本就没有思路,知道这是主席树,我就去学了下,在b站上看了uestc的教学视频,然后看了一篇博客,博客http://www.cnblogs.com/E ...
- C++ 字符串截取转换及字符流控制
文章由来 ------------------工作需要缓冲区里的字符串控制,还是混合编译的那种,根据协议来定义截取各种字符流,控制大小长度,截取返回的内容然后转换成特定的类型, 可能表述不是那么正确, ...
- python 常用技巧 — 列表(list)
目录: 1. 嵌套列表对应位置元素相加 (add the corresponding elements of nested list) 2. 多个列表对应位置相加(add the correspond ...
- Hands Off for Mac如何卸载?完全卸载Hands Off的方法
Hands Off for Mac如何卸载?hands off是一款超好用的防火墙软件,在Mac系统上强大且易用,能够控制所有应用的网络连接和文件系统访问,保护我们的隐私数据和系统安全性,如果不需要了 ...
- Delphi 版本信息获取函数 GetFileVersionInfo、GetFileVersionInfoSize、VerFindFile、VerInstallFile和VerQueryValue
一.版本信息获取函数简介和作用 获取文件版本信息的作用: 1. 避免在新版本的组件上安装旧版本的相同组件: 2. 在多语言系统环境中,操作系统根据文件版本信息里提供的语言信息在启动程序时决定使用的正确 ...
- shell脚本学习(2)查找
1 grep 用法: grep -F fa 找含有fa字符的字符串 yuyuyu@ubuntu:~$ grep -F fa < do.txt grep -i fa 忽略大 ...
- Centos7 安装配置 SVN
准备工作: 检查是否安装SVN:rpm -qa subversion 查看安装SVN版本信息:svnserve --version 卸载旧版本SVN: yum remove subversion 1. ...
- php对接极光推送
首先要明白php对接极光推送要做些什么,极光推送的大致流程是:你的服务器----->极光服务器------>app端.而php要做的就只有我们的服务器到极光服务器这个过程.极光服务器到ap ...
- IOS 创建目录/文件夹
•IOS 应用目录简介 个文件夹:Documents, Library和 tmp.Library包含Caches.Preferences目录. Documents:应用中用户数据可以放在这里,iTun ...