BZOJ3461 : Jry的时间表

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;
}

  

时间: 2024-10-30 14:38:48

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

有趣的凸壳问题~

PART I  BZOJ 1249 1249: SGU277 HERO 动态凸包 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 406  Solved: 123[Submit][Status] Description 平面上最开始只包含3个点,然后还会依次出现N个点.每新增一个点,请你求出包含这些点的周长最小的多边形的面积(也就是凸包的面积). Input 第一行为6个整数,表示最初的三个点的坐标(x1,y1),(x2,y2),(x3,y3).

超级实用!全郑州地铁沿线景点美食全攻略(附首末班时间表)

超级实用!全郑州地铁沿线景点美食全攻略(附首末班时间表) 2017-04-20小金豆郑州微公交 玩得劲 春天在哪里呀? 春天在哪里? 小编总结了 郑州地铁线路景点美食大全 及最新地铁首末班时刻表 最美人间四月天 快跟着小编 坐上地铁去旅行吃美食吧 别忘备上纸巾擦口水啊~ 一 郑州地铁沿线最全景点美食一览 1 1号线 龙子湖站 龙子湖 票价:免费 地址:郑东新区新107国道以东 市体育中心站 中原网球中心 票价:免费 地址:金水区金水东路附近 固始菜家庭餐馆 人均:¥20 地址:金水东路与明理路交

美国务院将公布希拉里任职期间邮件公开时间表

国华盛顿地区法院19日决定,限美国务院一周内确定全面公开希拉里·克林顿任国务卿期间邮件的时间表.美国务院当天表示服从这一决定.华盛顿地区法院法官鲁道夫·孔特雷拉斯19日在审理由美国Vice新闻网发起的诉讼时做出上述决定.他要求美国务院尽快对希拉里任职期间的邮件内容进行审核,限其一周内确定全面公开的时间表.http://www.ximalaya.com/zhubo/27632879/ http://www.ximalaya.com/zhubo/27632886/ http://www.ximala

介绍一款时间表(TimeTable)的用法

前言 最近在为某培训机构开发教务管理系统,其中遇到的比较多的就是课表的展示,在google中搜索一番之后,找到了一款比较好的timetable,所以和大家一起分享一下. 在线demo: http://timetable.askblog.net/Timetable.htm step0 引入相关的css及js文件 <link href="css/bootstrap.css" rel="stylesheet" /> <link href="cs

嵌入式Linux会议LinuxCon欧洲的时间表公布

From: http://linuxgizmos.com/embedded-linux-conference-and-linuxcon-europe-schedules-posted/ Linux基金会公布了LinuxCon + CloudOpen +嵌入式Linux大会欧洲的时间表,它们将在10月13-15日于德国的杜塞尔多夫举行.除了Linux基金会在七月初发布的LinuxCon + CloudOpen + ELC(嵌入式Linux大会)欧洲的主题演讲的初步名单外,Linux的倡导组织追加了

最健康的作息时间表与建议

最健康的作息时间表与建议 最近听说在百度工作的一位新童鞋由于身体超负荷运作,不幸的过劳挂了.想想有多少还在奋斗路上的童鞋英年早逝,感到生命无比的脆弱与渺小.倘若我们都不关心自己的生命健康,那其它的神马都是浮云.为此健康的生活方式是无比的重要,据说是世界上最健康的作息,借以明志,再不通宵. 健康作息时间表 7:30:起床.英国威斯敏斯特大学的研究人员发现,那些在早上5:22―7:21 分起床的人,其血液中有一种能引起心脏病的物质含量较高,因此,在7:21之后起床对身体健康更加有益. 打开台灯."一

权威发布:2015年项目管理认证(PMP)考试时间表

2015年度美国项目管理协会PMP认证考试时间由共创国际-项目管理者联盟授权发布. 共创国际-项目管理者联盟是国内最早(成立于2001年)开展项目管理服务的专业机构之一,为美国项目管理学会全球教育合作伙伴(Global REP)与国家外国专家局授权培训合作伙伴.项目管理者联盟通过引进先进的项目管理知识体系与方法论(PMBOK,SPM,OPM3,ICB,DELTA),结合项目管理最佳实践向企业提供项目管理咨询与服务. 2015年项目管理认证(PMP)考试时间安排如下,该时间表仅供参考,确切时间以每

数学建模的时间表和分工

笔者美赛的安排,试用所有数模比赛,记录一下,不然就浪费了.有需要的可以参考一下. 俗话说,机会总是留给有准备的人. 时间表,不全:  分工表: 有需要资料的,可以留言!

Java发展的时间表

Java发展的时间表. (版本号 名称 中文名 发布日期) JDK 1.1.4 Sparkler 宝石 1997-09-12 JDK 1.1.5 Pumpkin 南瓜 1997-12-13 JDK 1.1.6 Abigail 阿比盖尔--女子名 1998-04-24 JDK 1.1.7 Brutus 布鲁图--古罗马政治家和将军 1998-09-28 JDK 1.1.8 Chelsea 切尔西--城市名 1999-04-08 J2SE 1.2 Playground 运动场 1998-12-04