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 ...
随机推荐
- @Profile-根据不同环境注入bean
介绍 @Profile元注解是在不同的生产环境中,@Bean创建的SpringBean根据spring.profiles.active指定的环境不同创建不同环境的bean对象 一.@Profile元注 ...
- 骨架屏css样式
.chiaroscuro { background: #f2f2f2; animation-duration: 1.5s; animation-name: blink; animation-itera ...
- com 组件的本知识
(今日看到网络上关于"COM中GUID......"文章,写的好,故记录之.)当初微软设计com规范的时候,有两种选择来保证用户的设计的com组件可以全球唯一:第一种是采用和Int ...
- spring学习日志二
一.spring依赖注入的方式 1.通过set方法来完成注入 <bean id="student" class="com.zhiyou100.xz.spring.S ...
- 二 MongoDB数据类型和$type操作符
一.MongoDB中可以使用的类型如下表所示 二.$type操作符 举个例子:想获取指定集合中title为String类型的所有文档
- Servlet常见问题
时间:2016-12-6 23:18 java.lang.ClassNotFoundException: org.apache.commons.collections.FastHashMapcommo ...
- ecshop文件架构
/*ECShop 2.5.1 的结构图及各文件相应功能介绍ECShop2.5.1_Beta upload 的目录┣ activity.php 活动列表┣ affiche.php 广告处理文件┣ aff ...
- 基于Nginx实现负载均衡的部署
Nginx(enginex)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器. nginx官方网站:http://nginx.org/ nginx plus收费软件, ...
- JDK和环境配置,eclipse安装与使用
本博客部分参照https://blog.csdn.net/PGY0000/article/details/79256720 (记住要尊重别人的劳动产品) 原博客给的链接和后面的安装过程有点不一样,不能 ...
- <题解>「LibreOJ NOIP Round #1」序列划分
solutions 题面loj#542 对我来说,这或许已经超出了我的能力,我,只能看题解 不知道我写完这一篇题解之后,会不会对我的构造题有一点点的帮助 让我在这类题的解决上能过有一些提升 直接说明白 ...