Csp-s2019 划分
本题主要靠结论
12pt
爆搜
时间复杂度\(O(n^n)\)
36pt
\(f_{i,j}表示前i个数由状态j转移过来,a_i表示前缀和\)
\(So,f_{i,j}=f_{j,k}+(a_i-a_j)^2\ \ \ \ \ \ \ (a_j-a_k\leq a_i-a_j)\)
时间复杂度\(O(n^3)\)
64pt
我们发现,在\(i\)变大过程中,每个\(j\)对应的\(k\)也只会变大,所以用一个\(g_j\)表示当前\(j\)状态的\(k\)动到哪儿了,再配合后缀最小值均摊转移\(O(1)\)
时间复杂度\(O(n^2)\)
100pt
结论:当\(j\)一定时取\(k\)最大的,并且要合法。
证明
所以:\(f_i=min \{f_j+(a_i-a_j)^2\}\ \ \ \ \ \ \ \ \ \ (a_j-a_{g_j} \leq a_i-a_j)\)
我们把条件变换一下\(\Rightarrow\) \(2*a_j-a_{g_j}\leq a_i\),发现可以用单调队列优化
\(\mathfrak{Talk\ is\ cheap,show\ you\ the\ code.}\)
#include<cstdio>
#include<algorithm>
using namespace std;
# define Type template<typename T>
# define read read1<int>()
Type inline T read1()
{
T t=0;
bool ty=0;
char k;
do k=getchar(),(k=='-')&&(ty=1);while('0'>k||k>'9');
do t=(t<<3)+(t<<1)+(k^'0'),k=getchar();while('0'<=k&&k<='9');
return ty?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define ll long long
# define I128 __int128
int s,p[100001],l[100001],r[100001],g[40000001],q[40000001];
# define ret(n) (a[n]*2-a[g[n]])
ll a[40000002];
bool ty;
void into()
{
s=read;ty=read;
if(!ty)for(int i=0;i++^s;)a[i]=read;
else
{
ll x=read,y=read,z=read;
int now=0,b[2];
b[0]=read,b[1]=read;
int m=read;
for(int i=0;i++^m;p[i]=read,l[i]=read,r[i]=read);
for(int i=0;i++^s;)
{
while(p[now]<i)++now;
if(i<=2)a[i]=b[i-1]%(r[now]-l[now]+1)+l[now];
else
{
b[0]^=b[1]^=(b[0]=(y*b[0]+x*b[1]+z)%(1<<30))^=b[1];
a[i]=b[1]%(r[now]-l[now]+1)+l[now];
}
}
}
}
void work()
{
int l=0,r=0;
for(int i=0;i++^s;a[i]+=a[i-1]);
for(int i=0;i++^s;)
{
while(l<r&&ret(q[l+1])<=a[i])++l;
g[i]=q[l];
while(l<r&&ret(q[r])>=ret(i))--r;
q[++r]=i;
}
I128 ans=0;
while(s)ans+=(I128)(a[s]-a[g[s]])*(a[s]-a[g[s]]),s=g[s];
r=0;
do
{
q[++r]=ans%10;
ans=ans/10;
}while(ans);
do
{
printf("%d",q[r]);
}while(--r);
}
int main()
{
//fre("partition");
into();
work();
return 0;
}
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是这样一个系统,它提供了一个在线创建会议以及预订会议座位的平台.这个系统的 ...
- Cesium原理篇:2最长的一帧之网格划分
上一篇我们从宏观上介绍了Cesium的渲染过程,本章延续上一章的内容,详细介绍一下Cesium网格划分的一些细节,包括如下几个方面: 流程 Tile四叉树的构建 LOD 流程 首先,通过上篇的类关系描 ...
随机推荐
- Linux纯小白操作(以安装JDK为例)
[本文只针对纯小白,有基础的请略过] 最近公司给分配工作使用的虚拟机都是Linux系统的,以前完全没接触过,今天按照网上一些教程操作,好多地方感觉对小白不够友好(有些问题非常小白那些教程没有写出来.我 ...
- HighChat动态绑定数据 数据后台绑定(三)
今天看了几位大佬的博客,学到了一些,现在分享一下,也作为以后的参考 不多说看代码 1.后台代码 public ActionResult Ajax2() { ReportData reportData ...
- laravel框架之即时更改
表单//@foreach($res as $k=>$v) <tr id="{{$v->id}}" > <td>{{$v->id}}< ...
- MTSC2019-腾讯WeTest独家揭秘移动游戏测试和质量保障 QA 黑科技
WeTest 导读 TesterHome 联合腾讯 WeTest 出品 MTSC2019 重磅游戏测试 Topic ,首次公开揭秘腾讯亿级用户游戏背后的质量保障 QA 黑科技. 2019 年,中国游戏 ...
- 要什么 Photoshop,会这些 CSS 就够了
标题党一时爽,一直标题党一直爽 还在上大学那会儿,我就喜欢玩 Photoshop.后来写网页的时候,由于自己太菜,好多花里胡哨的效果都得借助 Photoshop 实现,当时就特别希望 CSS 能像 P ...
- Android源码分析(十二)-----Android源码中如何自定义TextView实现滚动效果
一:如何自定义TextView实现滚动效果 继承TextView基类 重写构造方法 修改isFocused()方法,获取焦点. /* * Copyright (C) 2015 The Android ...
- WorkFlow二:简单的发邮件工作流
1.使用事物代码SWDD.默认进入如下: 2.点击新建再点击转到抬头. 3.填写基础信息,工作流名称和描述.之后点击保存并返回. 这时候工作流的名字从之前的未命名改变了,工作流ID也根据上篇配置的前序 ...
- 深入理解MDL元数据锁
前言: 当你在MySQL中执行一条SQL时,语句并没有在你预期的时间内执行完成,这时候我们通常会登陆到MySQL数据库上查看是不是出了什么问题,通常会使用的一个命令就是 show processli ...
- Windows Server安装FileZilla服务端
1.下载 地址: https://filezilla-project.org/download.php?type=server 点击下载 2. 安装较为简单, 不详细介绍,下面说配置 2.1 添加用户 ...
- 【Tomcat】使用Eclipse绑定Tomcat 发布应用&&常见错误
创建时间:6.14 一.Eclipse绑定Tomcat 步骤1:获得服务器运行环境配置,Window/Preferences/Server/Runtime Environment 步骤2:添加服务器 ...