这道题真的超级...毒瘤 + 卡常 + 耗 RP 啊...

传送门

noteskey

题解看 shadowice 大仙 的

code

如果发现自己 T 掉了,别心急,洗把脸再交一遍试试...

//by Judge
#pragma GCC optimize("Ofast")
#include<bits/stdc++.h>
#define Rg register
#define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(Rg int i=(a),I=(b)-1;i>I;--i)
#define ll long long
using namespace std;
const ll minf=-(1ll<<47);
const int M=1e5+3;
const int BL=110;
#ifndef Judge
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
#endif
char buf[1<<21],*p1=buf,*p2=buf;
template<class T>inline T Max(T a,T b){return a>b?a:b;}
template<class T>inline T Min(T a,T b){return a<b?a:b;}
inline ll read(){ ll x=0,f=1; char c=getchar();for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
} char sr[1<<21],z[20];int CCF=-1,Z;
inline void Ot(){fwrite(sr,1,CCF+1,stdout),CCF=-1;}
inline void print(ll x,char chr='\n'){if(CCF>1<<20)Ot();if(x<0)sr[++CCF]=45,x=-x;while(z[++Z]=x%10+48,x/=10);while(sr[++CCF]=z[Z],--Z);sr[++CCF]=chr;
} int n,m;
struct poi{ ll x,y;poi operator +(const poi& b){return (poi){x+b.x,y+b.y};}
}st[BL+3];
inline bool cmp(const poi& a,const poi& b,const ll& k){return k*(b.x-a.x)>=b.y-a.y;}
inline bool cmp(const poi& a,const poi& b,const poi& c){return (a.y-c.y)*(a.x-b.x)>=(a.y-b.y)*(a.x-c.x);}
inline bool cmp(const poi& a,const poi& b,const poi& c,const poi& d){return (c.y-d.y)*(a.x-b.x)>=(a.y-b.y)*(c.x-d.x);}
inline void chull(poi* st,int& tp){ int r=tp; tp=1;fp(i,2,r){ while(tp>1&&cmp(st[tp-1],st[tp],st[i])) --tp; st[++tp]=st[i]; }
}
struct data{ ll sum,l,r,ans;data operator +(data b){return (data){sum+b.sum,Max(sum+b.l,l),Max(r+b.sum,b.r),Max(r+b.l,Max(ans,b.ans))};}
}; ll asum[BL+3]; int pos[M],bj[M];
inline void insert(const poi& a){st[a.x].y=Max(st[a.x].y,a.y);}
#define ins insert
#define B BL
#define N M
struct block{ bool FLG; int siz; int p1,p2,p3,s1,s2,s3,cut;data val; ll add,a[BL+3]; poi pre[BL+3],suf[BL+3],ans[BL+3];inline int brusolv(int l,int r){ Rg ll sum=0;fp(i,l+1,r) sum+=a[i],ans[i]=(poi){i-l,sum};fp(i,l+2,r){ sum=0; poi* nw=ans+l+1;fp(j,i,r) sum+=a[j],nw->y=Max(nw->y,sum),++nw;}return s3=r-l,chull(ans+l,s3),s3;}inline int solv(int l,int r){if(r-l<cut) return 0; if(r-l<=16) return brusolv(l,r);int mid=(l+r)>>1,t1=solv(l,mid),t2=solv(mid,r);fp(i,1,r-l) st[i]=(poi){i,minf};fp(i,l+1,l+t1) insert(ans[i]);fp(i,mid+1,mid+t2) insert(ans[i]);ll sum=s1=0; fp(i,mid+1,r) ++s1,sum+=a[i],pre[s1]=(poi){s1,sum};chull(pre,s1);sum=s2=0; fd(i,mid,l+1) ++s2,sum+=a[i],suf[s2]=(poi){s2,sum};chull(suf,s2);int i=1,j=1; insert(pre[i]+suf[j]);for(;i^s1&&j^s2;insert(pre[i]+suf[j]))cmp(pre[i],pre[i+1],suf[j],suf[j+1])?++j:++i;if(i^s1) for(++i;i<=s1;++i) insert(pre[i]+suf[j]);if(j^s2) for(++j;j<=s2;++j) insert(pre[i]+suf[j]);chull(st,s3=r-l); fp(i,1,s3) ans[l+i]=st[i]; return s3;}inline void aju(poi* a,int& p,const int& t){for(;p^t;++p) if(cmp(a[p],a[p+1],-add)) break;}inline void rebuild(){ fp(i,1,siz) a[i]+=add; add=0;if(!FLG){ FLG=1;fp(i,1,siz)FLG=FLG&&a[i]>=0;}cut=ans[p3].x,solv(0,siz);ll sum=s1=0; fp(i,1,siz) ++s1,sum+=a[i],pre[s1]=(poi){s1,sum};chull(pre,s1);sum=s2=0; fd(i,siz,1) ++s2,sum+=a[i],suf[s2]=(poi){s2,sum};chull(suf,s2);aju(pre,p1=1,s1),aju(suf,p2=1,s2),aju(ans,p3=1,s3),FLG&=(p1==s1)&&(p2==s2)&&(p3==s3);val=(data){sum,Max(pre[p1].y,0ll),Max(suf[p2].y,0ll),Max(ans[p3].y,0ll)};}inline ll calc(const poi& a){return Max(a.x*add+a.y,0ll);}inline void lb_add(ll x){if(FLG) return add+=x,val.sum+=siz*x,val.l=val.r=val.ans=val.sum,void();add+=x,aju(pre,p1,s1),aju(suf,p2,s2),aju(ans,p3,s3),FLG&=(p1==s1)&&(p2==s2)&&(p3==s3);val=(data){val.sum+siz*x,calc(pre[p1]),calc(suf[p2]),calc(ans[p3])};}inline data calc(int l,int r){ data res=(data){0,0,0,0};int tp=0; fp(i,l,r) asum[++tp]=a[i]+add;fp(i,1,tp) res.sum+=asum[i],res.l=Max(res.l,res.sum); res.sum=0;fd(i,tp,1) res.sum+=asum[i],res.r=Max(res.r,res.sum); ll mi=0;fp(i,1,tp) asum[i]+=asum[i-1];fp(i,1,tp) res.ans=Max(res.ans,asum[i]-mi),mi=Min(mi,asum[i]); return res;}inline ll fstcalc(int l,int r){ int tp=0; fp(i,l,r) asum[++tp]=a[i]+add;fp(i,1,tp) asum[i]+=asum[i-1]; ll mi=0,ans=0;fp(i,1,tp) ans=Max(ans,asum[i]-mi),mi=Min(mi,asum[i]); return ans;}
}bl[(M/BL)+3];
int main(){ n=read(),m=read();for(Rg int i=0,t=1;i<n;i+=BL,++t){for(Rg int j=1;j<=BL&&i+j<=n;++j)bl[t].a[j]=read(),pos[i+j]=t,bj[i+j]=j;bl[t].siz=Min(n-i,BL),bl[t].rebuild();} Rg int t,l,r; Rg ll x;fp(i,1,m){ t=read(),l=read(),r=read();if(t&1){ x=read();if(pos[l]==pos[r]){fp(i,bj[l],bj[r])bl[pos[l]].a[i]+=x;bl[pos[l]].rebuild();} else{fp(i,bj[l],BL) bl[pos[l]].a[i]+=x;bl[pos[l]].rebuild();fp(i,pos[l]+1,pos[r]-1) bl[i].lb_add(x);fp(i,1,bj[r]) bl[pos[r]].a[i]+=x;bl[pos[r]].rebuild();}} else{if(pos[l]==pos[r]) print(bl[pos[l]].fstcalc(bj[l],bj[r]));else{ data res=bl[pos[l]].calc(bj[l],BL);fp(i,pos[l]+1,pos[r]-1) res=res+bl[i].val;res=res+bl[pos[r]].calc(1,bj[r]),print(res.ans);}}} return Ot(),0;
}

转载于:https://www.cnblogs.com/Judge/p/10706400.html

[Ynoi2018]末日时在做什么?有没有空?可以来拯救吗?相关推荐

  1. bzoj5144 [Ynoi2018]末日时在做什么?有没有空?可以来拯救吗?

    这个死宅题面就不吐槽了... 2018目标:一定要让nzhtl1477nzhtl1477nzhtl1477把罚抄打通! 这题当然是O(nn−−√+nlogn)O(nn+nlogn)O(n\sqrt{n ...

  2. 【末日时在做什么?有没有空?可以来拯救吗?】Scarborough Fair

    珂朵莉:我曾经发誓要永远和他在一起,能够如此发誓,让我无比幸福. 威廉:我曾经发誓要永远和她在一起,能够如此发誓,让我心获安详. 珂朵莉:我曾经以为自己喜欢这个人, 威廉:我曾经觉得自己非常珍视她, ...

  3. 【报错笔记】在做struts项目时,所有项目代码没问题但就是报404错误。

    在做struts项目时,所有项目代码没问题但就是报404错误,而且tomcat一次只能运行一个项目,做第二个得关闭tomcat,清空再开启运行. 我重新下载了tomcat9还是那样,可能是eclips ...

  4. 蔚来一面:用Object做hashMap的Key时需要做什么?

    作者 | petterp 来源 | https://blog.csdn.net/petterp/article/details/89043847 先来说一下hashcode()和equals方法吧. ...

  5. YARN - Task, Node manager, AppMaster, Resource manager 失败时所做的处理

    本文为< Hadoop 权威指南第四版 >(英文原版) 读书笔记,仅限交流使用,转载请注明出处,多谢. YARN - 失败时所做的处理 Henvealf/文 YARN 的失败总共包含四种实 ...

  6. 郝小亮-读王坚《在线》:互联网能做的和没做的事还有很多

    王坚博士是我所见过的互联网公司管理层中,为数不多的能够将演讲做到不使台下观众犯困的人之一,更何况他所演讲的内容大多与艰涩难懂的技术相关.这当然算得上是一项优于常人的能力,尽管在这方面阿里巴巴集团董事局 ...

  7. C语言编程调试时,做完所有操作回车运行,调试框直接闪退。

    C语言编程调试时,做完所有操作回车运行,调试框直接闪退. 像下面的,运行后运行框闪一下就没了! #include "stdio.h" int main() {printf(&quo ...

  8. 当你无聊时可以做这15件高效的事

    原文链接:http://www.lifehack.org/articles/productivity/when-youre-bored-these-15-productive-things.html, ...

  9. SAP PP 为工单确认时自动做收货的设置

    SAP PP 为工单确认时自动做收货的设置 TCode: OP67 Micro Message: JINYULIN_SH_

最新文章

  1. gentoo下gnome的抓图功能
  2. [PSA]-PSA Certified简介
  3. css_position
  4. 谷歌Edge TPU:将机器学习引入边缘,撬动边缘计算/IOT大“地球”
  5. Java笔记-解决SSLHandshakeException: No subject alternative names present
  6. visual2019没有勾选的在如何加入_没有预留期权池,如何激励新加入者?
  7. git撤销单个文件的修改_程序员都要掌握的 Git 使用技巧【实践】
  8. 计算机编程—必备基础知识点
  9. linux语言 ctrl命令,linux下Ctrl命令组合
  10. 视频剪辑的方法,视频裂变
  11. C#office的0x8002801D或者0x80029C4A问题
  12. Endnote--在参考文献列表中添加DOI
  13. 二元置信椭圆r语言_医学统计R语言:分面画boxplot
  14. Android关键字persistent
  15. 用html如何做发帖的页面,如何用html发帖
  16. 对文件进行哈夫曼编码压缩与译码的C++实现 以及压缩率计算 ——HIT杨朔
  17. Android---性能优化方案分享,高级android开发强化实战pdf
  18. 0x7c97cdf2指令引用的0x00000014内存。该内存不能为”written
  19. 小程序直播公测,微信再造电商梦?
  20. NCC的openApi介绍、NCC二开,对接NCC、简化版的openapi服务

热门文章

  1. 创建线程时候多参数传递方法及参数改变问题--扫雷辅助(三)
  2. C++学习笔记-----继承体系中函数的重载,覆盖和隐藏的区别
  3. 汇编之loop指令使用栈实现二重循环,同时了解汇编函数(过程)的概念用法
  4. spring 框架-java配置163邮件服务器,发送邮件
  5. Codeforces Round #529 (Div. 3) F. Make It Connected(最小生成树)
  6. Ubuntu 18.10安装MySql8.0.13
  7. jetson nano 系统镜像制作_参考备份Jetson Nano系统(该程序不完备,制作的image不可用,仅供)...
  8. Leetcode题库 125.验证回文串(双指针 C实现)
  9. linux基础-1.1USB设备(USB1.0以上)连接使用
  10. SQL数据库对象的删除