P4756-Added Sequence【斜率优化】
正题
题目链接:https://www.luogu.com.cn/problem/P4756
题目大意
给出序列\(a\),设\(f(l,r)=|\sum_{i=l}^ra_i|\)。
\(m\)次询问若序列\(a\)全部加上某个数\(x\),求最大的\(f(l,r)\)。
\(1\leq n,m\leq 2\times 10^5\),强制在线(或许)
解题思路
求一次前缀和的话设为\(s_i\),那么\(f(l,r)=|s_r-s_l|\)。其实拆开绝对值不难发现这样就去掉了\(l,r\)的限制,答案就是\(max\{s_r\}-min\{s_l\}\)了。
然后集体加上某个数\(x\)的话,原来的\(s_i\)就变为了\(s_i+i\times x\)了。
然后就是给出\(x\)求最大和最小的\(s_i+i\times x\)。经典的斜率优化把戏。
维护一个上凸壳,一个下凸壳,然后在上面二分就好了。
时间复杂度\(O(n+m\log n)\)
code
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10;
ll n,m,top,toq,f[N],s[N],t[N];
ll calc(ll x,ll i)
{return x*i+f[i];}
signed main()
{
scanf("%lld%lld",&n,&m);
for(ll i=1;i<=n;i++){
scanf("%lld",&f[i]);f[i]+=f[i-1];
while(top&&(f[i]-f[s[top]])*(s[top]-s[top-1])>=(f[s[top]]-f[s[top-1]])*(i-s[top]))top--;s[++top]=i;
while(toq&&(f[i]-f[t[toq]])*(t[toq]-t[toq-1])<=(f[t[toq]]-f[t[toq-1]])*(i-t[toq]))toq--;t[++toq]=i;
}
ll pre=0,x;
while(m--){
scanf("%lld",&x);x=(x+pre)%(4*n+1)-2*n;
ll l=0,r=top-1;pre=0;
while(l<=r){
ll mid=(l+r)>>1;
if(calc(x,s[mid])>calc(x,s[mid+1]))r=mid-1;
else l=mid+1;
}
pre+=calc(x,s[l]);
l=0;r=toq-1;
while(l<=r){
ll mid=(l+r)>>1;
if(calc(x,t[mid])<calc(x,t[mid+1]))r=mid-1;
else l=mid+1;
}
pre-=calc(x,t[l]);
printf("%lld\n",pre);
}
return 0;
}
P4756-Added Sequence【斜率优化】的更多相关文章
- [POJ1180&POJ3709]Batch Scheduling&K-Anonymous Sequence 斜率优化DP
POJ1180 Batch Scheduling Description There is a sequence of N jobs to be processed on one machine. T ...
- POJ 3709 K-Anonymous Sequence - 斜率优化dp
描述 给定一个数列 $a$, 分成若干段,每段至少有$k$个数, 将每段中的数减少至所有数都相同, 求最小的变化量 题解 易得到状态转移方程 $F_i = \min(F_j + sum_i - su ...
- POJ3709 K-Anonymous Sequence 斜率优化DP
POJ3709 题意很简单 给n个递增整数(n<=500000)和一种操作(选择任意个数 使他们减少整数值) 使得对于所有的整数 在数列中 有k个相等的数 O(n^2)的DP方程很容易得出 如下 ...
- luogu P4756 Added Sequence(凸包+思维)
一眼望去不会. 考虑问题中的\(f(i,j)=|\sum_{p=i}^{j}a_p |\)的实际意义. 其实就是前缀和相减的绝对值. \(f(i,j)=|\ sum[j]-sum[i-1]\ |\ ...
- UOJ#104. 【APIO2014】Split the sequence 动态规划 斜率优化
原文链接www.cnblogs.com/zhouzhendong/p/UOJ104.html 题解 首先证明一个结论:对于一种分割方案,分割的顺序不影响最终结果. 证明:对于树 a[x] 和 a[y] ...
- POJ 3709 K-Anonymous Sequence(斜率优化DP)
[题目链接] http://poj.org/problem?id=3709 [题目大意] 给出一个长度为n个非严格单调递增数列,每次操作可以使得其中任意一项减一, 问现在使得数列中每项数相同的数的数量 ...
- poj3709 K-Anonymous Sequence[贪心+斜率优化dp]
地址 n个数,可进行把一个数减小的操作,代价为减小的值.现求使数列任意一个数都存在至少k-1个数和他相同,问操作的最小代价. 可以先考虑最小的数,由于只能减,所以必须得至少k-1个数减为最小数,贪心策 ...
- 【DP】斜率优化
斜率优化 入门题:PKU3709 很多人貌似都是做这道题来K斜率优化的,所以看了资料以后还是开始入手吧. 然而还是得跪求大神的程序啊 ORZ ORZ…… 其实理解斜率优化就是会列斜率不等式,还要理解剔 ...
- HDU 2993 MAX Average Problem dp斜率优化
MAX Average Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
随机推荐
- 【springcloud】Eureka 常用配置解析
转自:https://www.cnblogs.com/zyon/p/11023750.html 1. 配置项解析 1.1 通用配置 # 应用名称,将会显示在Eureka界面的应用名称列 spring. ...
- mybatis学习日志一
Mybatis 介绍 MyBatis 是支持 普通 SQL 查询 , 存储过程 和 高级映射 的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以 及对结果集的检索封装 ...
- linux &和&&,|和||
&和&&,|和||区别: & 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server & && 表示前一 ...
- Redis常用技术
Xml配置: <?xml version='1.0' encoding='UTF-8' ?> <!-- was: <?xml version="1.0" e ...
- MZY项目笔记:session歧路
from my typora MZY项目笔记:session歧路 文章目录 MZY项目笔记:session歧路 那该怎么办? 1. 手动加上cookie的header. 2.自己模拟一个Session ...
- String与Int类型的转换
http://blog.sina.com.cn/s/blog_4f9d6b1001000bfo.html int -> String int i=12345; String s="&q ...
- String转double失去精度问题
最近遇到一个坑,微信小程序中退款 19.9的字符串转double变成19.89,导致退不成功 . 坑死我了.现在把更改后的代码贴出来 public static void main(String[] ...
- PyQt4制作GUI
时间:2018-11-30 记录:byzqy 标题:PyQt4入门学习笔记(一) 地址:https://www.cnblogs.com/chuxiuhong/p/5865201.html 标题:PyQ ...
- 怎样去除EXCEL中的重复行
工具/原料 安装了EXCEL2010的电脑一台 步骤/方法 假如我们的表格中有下图所示的一系列数据,可以看出其中有一些重复. 首先我们选中所有数据.可以先用鼠标点击"A1单元格&qu ...
- MySQL binlog 自动清理脚本
# vim /data/scripts/delete_mysql_binlog.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...