大力讨论。

luogu上交spoj的题卡的一比...

难受

wa了好几次,原因大概首先求的是非空区间,不能乱和0取max,第二点是求无相交的解时,在两段求lmx和rmx的时候可以取max(0)。

区间相交的有四种讨论,大概就是讨论一下左右端点在左/右/公共区间即可。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N=10005;
int n,q,a[N];
struct Segtree {
int lmx,rmx,mx,sum;
Segtree() {lmx=rmx=mx=sum=0;}
} t[N<<2];
Segtree pushup(Segtree x,Segtree y) {
Segtree ans;
ans.sum=x.sum+y.sum;
ans.lmx=max(x.sum+y.lmx,x.lmx);
ans.rmx=max(y.sum+x.rmx,y.rmx);
ans.mx=max(x.mx,max(y.mx,x.rmx+y.lmx));
return ans;
}
void build(int cur,int l,int r) {
if(l==r) {
t[cur].sum=t[cur].rmx=t[cur].lmx=t[cur].mx=a[l];
return;
}
int mid=l+r>>1;
build(cur<<1,l,mid);
build(cur<<1|1,mid+1,r);
t[cur]=pushup(t[cur<<1],t[cur<<1|1]);
}
Segtree query(int ql,int qr,int l,int r,int cur) {
if(ql>qr) { Segtree x;return x;}
if(ql<=l&&r<=qr) return t[cur];
int mid=l+r>>1;
if(mid<ql) return query(ql,qr,mid+1,r,cur<<1|1);
else if(qr<=mid) return query(ql,qr,l,mid,cur<<1);
else return pushup(query(ql,qr,l,mid,cur<<1),query(ql,qr,mid+1,r,cur<<1|1));
}
int T;
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
for(int i=1; i<=n; i++) scanf("%d",&a[i]);
build(1,1,n);
scanf("%d",&q);
int xa,xb,ya,yb;
while(q--) {
scanf("%d%d%d%d",&xa,&ya,&xb,&yb);
int ans=0;
if(ya<xb) {
ans+=query(ya,xb,1,n,1).sum;
ans+=max(0,query(xa,ya-1,1,n,1).rmx);
ans+=max(0,query(xb+1,yb,1,n,1).lmx);
} else {
Segtree res1,res2,res3;
res1=query(xa,xb-1,1,n,1);
res2=query(xb,ya,1,n,1);
res3=query(ya+1,yb,1,n,1);
ans=max(max(res2.mx,res1.rmx+res2.lmx),max(res2.rmx+res3.lmx,res1.rmx+res2.sum+res3.lmx));
}
printf("%d\n",ans);
}
}
return 0;
}

最新文章

  1. 最新深度技术GHOST XP系统旗舰增强版 V2016年
  2. LinQ和ADO.Net增删改查 备忘
  3. unix下输出重定向
  4. Magento显示多货币,Magento 多货币设置
  5. iOS常用---NSString,NSMutabuleString
  6. centos 6.5 minimal 安装及vm-tools安装
  7. Unity3d:Unknown type &#39;System.Collections.Generic.CollectionDebuggerView&#39;1
  8. Android开发系列之AChartEngine
  9. Hive学习之六 《Hive进阶— —hive jdbc》 详解
  10. Android的5个进程等级(转)
  11. fs读取某个json文件的数据
  12. jenkins用户权限配置错误,导致登录时提示:没有Overall/read权限
  13. 关于时间的那些事--PHP、JavaScript、MySQL操作时间
  14. Vue在ASP.NET MVC中的进行前后端的交互
  15. January 24th, 2018 Week 04th Wednesday
  16. ceres入门学习
  17. 【javascript】您好, 您要的ECMAScript6速记套餐到了 (一)
  18. python 集合删除元素
  19. codevs 1365 浴火银河星际跳跃
  20. destoon 部署到服务器如何修改密码使网站能正常访问登录

热门文章

  1. requestAnimationFrame实现浏览器兼容
  2. netstat命令介绍-要用熟
  3. hdu5326 Work
  4. Scala入门到精通——第一节 Scala语言初步
  5. 状态压缩dp poj 3254 hdu5045
  6. 图像处理中的数学原理具体解释20——主成分变换(PCA)
  7. python:sql建表语句转换为json
  8. (转)android res文件夹里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
  9. position记录元素原始位置
  10. java使用FileUtils文件操作神器