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. Unity3d使用蓝牙(bluetooth)开发IOS点对点网络游戏

    著作权声明:本文由http://www.cnblogs.com/icker 原创,欢迎转载分享.转载时请保留该声明和作者博客链接,谢谢! 最近使用Unity3d制作的IOS游戏需要加入联网对战功能功能 ...

  2. PCL初步使用

    转载:http://blog.csdn.net/vbskj/article/details/7819828 本次试验的目的是利用PCL库来重建地形点云数据,并进行显示.总体流程是1)把DEM数据导入P ...

  3. sizeof()和strlen()的区别与联系

    参考:http://www.cnblogs.com/carekee/articles/1630789.html 1.sizeof是运算符,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数 ...

  4. MD(d)、MT(d)编译选项的区别

    1.编译选项的位置 以VS2005为例,这样子打开: 1)         打开项目的Property Pages对话框 2)         点击左侧C/C++节 3)         点击Code ...

  5. C/C++ 文件操作

    C/C++ 文件操作大概有以下几种 1.C的文件操作: 2.C++的文件操作: 3.WINAPI的文件操作: 4.BCB库的文件操作: 5.特殊文件的操作. 当然了,水题时最常用的当然还是: freo ...

  6. poj2253 最短路 floyd Frogger

    Frogger Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28825   Accepted: 9359 Descript ...

  7. 基本二叉搜索树的第K小元素

    #include<stdio.h> #include<stdlib.h> typedef struct node *btlink; struct node { int data ...

  8. shell脚本步骤调试

    第一种方式===> [root@localhost functions]# sh -x test.sh --check xx+ '[' --check '!=' -check ']'+ case ...

  9. jekyll中文乱码问题

    一般编写都是采用utf-8的吧,但是在windows下安装的jekyll,默认是以GBK编码的方式去读取咱们编写的文件,如此便乱码了. 要解决此问题,总不至于要写GBK编码的文件吧,毕竟这个编码不怎么 ...

  10. Repeated DNA Sequences

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...