fl[i]表示[1,i]操作一次,且在[j+1,i]处操作的最大值

1:把[j+1,i]改为b[i]:

max(sum[j]+b[i]*(i-j))

=b[i]*i+max(-j*b[i]+sum[j])(0<=j<i)

由于j递增,-j递减,所以从右往左建立凸壳,查询时在凸壳上二分查找即可,时间复杂度$O(n\log n)$。

2:把[j+1,i]改为b[j]:

max(sum[j]+b[j+1]*(i-j))

=max(b[j+1]*i+sum[j]-b[j+1]*j)(0<=j<i)

考虑分治,对[l,mid]按b[j+1]从小到大排序,然后斜率优化即可,时间复杂度$O(n\log^2n)$。

将a,b序列翻转,即可求出fr[i]。

ans=max(fl[i]-sum[i]+fr[j]+sum[j-1])(0<=i<j<=n)

=max(fr[j]+sum[j-1]+max(fl[i]-sum[i]))

维护前缀最大的fl[i]-sum[i]即可。

#include<cstdio>
#include<algorithm>
#define N 500010
typedef long long ll;
int n,i,j,a[N],b[N],c[N],e[N],q[N],h,t;ll sum[N],d[N],f[N],fl[N],fr[N],pre,ans;
inline void read(int&a){char c;while(!(((c=getchar())>='0')&&(c<='9')));a=c-'0';while(((c=getchar())>='0')&&(c<='9'))(a*=10)+=c-'0';}
inline double pos(int x,int y){return (double)(sum[x]-sum[y])/(double)(x-y);}
inline ll ask(int x){
int l=1,r=t-1,fin=t,mid;
while(l<=r){
mid=(l+r)>>1;
if((double)x>pos(q[mid],q[mid+1]))r=(fin=mid)-1;else l=mid+1;
}
return sum[q[fin]]-(ll)q[fin]*x;
}
inline void up(ll&x,ll y){if(x<y)x=y;}
inline bool cmp(int x,int y){return c[x]==c[y]?d[x]>d[y]:c[x]<c[y];}
inline double slope(int x,int y){return (double)(d[x]-d[y])/(double)(c[y]-c[x]);}
void solve(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
solve(l,mid),solve(mid+1,r);
for(j=0,i=l;i<=mid;i++)e[j++]=i;
for(std::sort(e,e+j,cmp),t=i=0,h=1;i<j;i++){
if(i&&c[e[i]]==c[e[i-1]])continue;
while(t>1&&slope(q[t-1],q[t])>=slope(q[t],e[i]))t--;
q[++t]=e[i];
}
for(i=mid+1;i<=r;i++){
while(h<t&&(d[q[h]]-d[q[h+1]])<=(ll)i*(c[q[h+1]]-c[q[h]]))h++;
up(f[i],(ll)c[q[h]]*i+d[q[h]]);
}
}
void work(){
for(i=1;i<=n;i++)sum[i]=sum[i-1]+a[i];
for(t=i=0;i<=n;q[++t]=i++){
if(i)f[i]=(ll)b[i]*i+ask(b[i]);
while(t>1&&pos(i,q[t])>pos(q[t],q[t-1]))t--;
}
for(i=0;i<n;i++)c[i]=b[i+1],d[i]=sum[i]-(ll)b[i+1]*i;
solve(0,n);
}
int main(){
for(read(n),i=1;i<=n;i++)read(a[i]);
for(i=1;i<=n;i++)read(b[i]);
work();
for(i=1;i<=n;i++)fl[i]=f[i];
for(i=1,j=n;i<j;i++,j--)t=a[i],a[i]=a[j],a[j]=t,t=b[i],b[i]=b[j],b[j]=t;
work();
for(i=1;i<=n;i++)fr[n-i+1]=f[i];
for(i=1;i<=n;i++)sum[i]=sum[i-1]+a[n-i+1];
for(ans=sum[n],i=1;i<=n;i++){
up(ans,fr[i]+sum[i-1]+pre);
up(pre,fl[i]-sum[i]);
}
return printf("%lld",ans),0;
}

  

BZOJ3461 : Jry的时间表的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. .NET Core RC2/RTM 明确了时间表

    .NET Core 经过了将近2年的开发,去年12月份发布的RC1版本,明确来说那只是一个beta版本,自从RC1发布以来,看到github里的RC2分支,整个工具链都发生了很大的变化,大家都在焦急的 ...

  3. [No0000A1]人体排毒时间表,别再信了

    经常可以看到有「人体排毒时间表」这样的说法,不同的媒体反复传播,大同小异.这些说法里,大多把人体的系统器官都给安排了一个特定的时段,认为在某时段是某器官的排毒时间,睡觉能排一切毒.事实上果真如此么?让 ...

  4. 【三石jQuery视频教程】03.创建垂直时间表(Timeline)

    视频地址:http://v.qq.com/page/g/i/o/g0150rvi6io.html 大家好,欢迎来到[三石jQuery视频教程],我是您的老朋友 - 三生石上. 今天,我们要通过基本的H ...

  5. Bootstrap日期和时间表单组件运用兼容ie8

    准备动作先到下载Bootstrap日期和时间组件. 1:引入bootstrap.min.css,因为bootstrap-datetimepicker里面的很多样式依赖bootstarp的主样式,字体文 ...

  6. Java发展的时间表

    Java发展的时间表. (版本号 名称 中文名 发布日期) JDK 1.1.4 Sparkler 宝石 1997-09-12 JDK 1.1.5 Pumpkin 南瓜 1997-12-13 JDK 1 ...

  7. 这是一篇关于:以时间表的形式来介绍Java如何演变至今,以及Java版本的一些特性的分享

    这是一篇关于:以时间表的形式来介绍Java如何演变至今,以及Java版本的一些特性的分享: Java版本,功能和历史 原文[英]:https://javapapers.com/core-java/ja ...

  8. input时间表单默认样式修改(input[type="date"])

    一.时间选择的种类: HTML代码:选择日期:<input type="date" value="2018-11-15" /> 选择时间:<i ...

  9. HttpWatch HttpWatch时间表(HttpWatch Time Charts)

    HttpWatch时间表(HttpWatch Time Charts) by:授客 QQ:1033553122 截图 说明 页面事件线(Page Event Lines)

随机推荐

  1. 搭建自己的ngrok服务

    转载:http://tonybai.com/2015/03/14/selfhost-ngrok-service/ 在国内开发微信公众号.企业号以及做前端开发的朋友想必对ngrok都不陌生吧,就目前来看 ...

  2. (转)搞ACM的你伤不起

    劳资六年前开始搞ACM啊!!!!!!!!!! 从此踏上了尼玛不归路啊!!!!!!!!!!!! 谁特么跟劳资讲算法是程序设计的核心啊!!!!!! 尼玛除了面试题就没见过用算法的地方啊!!!!!! 谁再跟 ...

  3. HM必修1

    高中数学必修一 笔记与拓展 1. 集合与函数概念 集合概念 集合是一个基本的数学概念. 集合是由集合的元素构成的. 当且仅当两个集合中包含着完全相同的元素且都不包含其它元素时两个集合相等. 集合是确定 ...

  4. PHP 的__call()

    PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法.如果你试着调用一个对象中不存在或被权限控制中的方法,__call 方法将会被自动调用. 例七:__call ...

  5. linux开机启动服务和chkconfig使用方法(自定义服务路径启动)

    服务概述在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动,关闭的时候自动关闭.将 需要自动启动的脚本/etc/rc.d/init.d目录 ...

  6. systemd在各个linux发行版的普及

    后面我要说下自己的意见: 原则如果阻碍了进步,那还算个屁,不客气地说,UNIX 原则已经过时了. 移植性问题:我除了 Mac 外不用任何 BSD 系统,当然 Mac 上一般只做开发不做运维(但就算如此 ...

  7. exFAT是支持Mac和Win的

    exFAT是支持Mac和Win的 转自: http://bbs.feng.com/read-htm-tid-8214017.html

  8. Android studio 程序升级和sdk manager 升级方法

    在中国使用android有点郁闷,经常被屏蔽.常遇到2个升级问题,现在总结如下:  1.android studio升级时提示 Connection failed. Please check your ...

  9. 手把手教你学会 Emacs 定制

    Table of Contents 1 前言 2 配置Emacs 2.1 设置界面 2.2 全屏以及最大化 2.3 设置周边 2.4 显示时间设置 2.5 设置日历 2.6 设置符合个人的操作习惯 2 ...

  10. July 15th, Week 29th Friday, 2016

    A book is a gift that you can open again and again. 书是你可以一次又一次打开的礼物. Some gifts are born with you, a ...