思路:用TREE记录节点的最大连续和,LEF记录左边开始的最大连续和,RIG记右边开始的最大连续和

然后处理的时候就是比较左边最大,右边最大  中间区间的问题

其中这个query 只能膜拜了。。。

大大缩减了时间。放弃治疗的我只会用三个函数

传参就要传出翔。

flag == -1表示要左边最大

flag == 1 表示要右边最大

然后ans在找到的区间的同时进行比较。

我已可入灵魂

#include <iostream>
#include <cstdio>
#include <algorithm>
#define MAXN 50005
#define lson num<<1,s,mid
#define rson num<<1|1,mid+1,e using namespace std; int tree[MAXN<<2];
int lef[MAXN<<2];
int rig[MAXN<<2];
int X[MAXN]={0};
int n;
int cnt; inline void pushup(int num,int s,int e)
{
int mid=(s+e)>>1; lef[num]=max(lef[num<<1],X[mid]-X[s-1]+lef[num<<1|1]);
rig[num]=max(rig[num<<1|1],X[e]-X[mid]+rig[num<<1]);
tree[num]=max(lef[num<<1|1]+rig[num<<1],max(tree[num<<1],tree[num<<1|1]));
} void build(int num,int s,int e)
{
if(s==e)
{
scanf("%d",&tree[num]);
lef[num]=rig[num]=tree[num];
X[cnt]=X[cnt-1]+tree[num];
cnt++;
return;
}
int mid=(s+e)>>1; build(num<<1,s,mid);
build(num<<1|1,mid+1,e);
pushup(num,s,e);
} int query(int num, int s, int e, int l, int r, int flag, int &ans)
{
int mid = (s+e)>>1;
if(s >= l && e <= r)
{
ans = max(ans, tree[num]);
return flag == -1 ? lef[num] : rig[num];
}
if(mid >= r)
return query(num<<1, s, mid, l, r, -1, ans);
else if(mid < l)
return query(num<<1|1, mid + 1, e, l, r, 1, ans);
else
{
int ln, rn;
ln = query(num<<1, s, mid, l, r, 1, ans);
rn = query(num<<1|1, mid + 1, e, l, r, -1, ans);
ans = max(ans, ln + rn);
if(flag == -1)
return max(lef[num<<1], X[mid] - X[s - 1] + rn);
else
return max(rig[num<<1|1], X[e] - X[mid] + ln);
}
} int main()
{
while(scanf("%d",&n)!=EOF)
{
cnt=1;
X[0]=0;
build(1,1,n); int m;
scanf("%d",&m);
while(m--)
{
int aa,bb;
scanf("%d%d",&aa,&bb);
int ans=X[aa]-X[aa-1];
query(1,1,n,aa,bb,-1,ans);
printf("%d\n",ans);
}
}
return 0;
} /*
8
-1 5 -6 7 -4 8 -2 7
999
*/

最新文章

  1. 如何解决自动加载与模板中(如Smarty)的自动加载冲突的问题
  2. oracle学习笔记系列------oracle操作例子的专用表
  3. php数组函数
  4. mysql 远程连接失败(linux)
  5. ORA-12505, TNS:listener does not currently know of SID given in connect descriptor (二)
  6. js 基础笔记三
  7. C# Ajax 返回json数据--前后台交互
  8. Cross the GreateWall方案
  9. 在自己笔记本电脑上如何访问虚拟机的内容、包括可以使用ssh、访问tomcat、访问nginx
  10. softmax函数详解
  11. centos下设置开机启动程序
  12. zookeeper 日志输出到指定文件夹
  13. 尝试ipad编程 以失败告终
  14. LeetCode题解之 Assign Cookies
  15. ElasticSearch 2 (9) - 在ElasticSearch之下(图解搜索的故事)
  16. 17秋 软件工程 Alpha 事后诸葛亮会议
  17. centos系统设置通过windows代理上网
  18. awk 入门教程
  19. [转][C#]手写 Socket 服务端
  20. CSS3 Backgrounds相关介绍

热门文章

  1. 一个简单的makefile,一次性编译本文件夹下所有的cpp文件
  2. Laravel 安装记录
  3. App 性能分析
  4. js带缩略图的图片切换效果
  5. 根据WSDL生成代理类方式
  6. Code First:如何实现一个主类中包含多个复类
  7. NGINX+UWSGI部署生产的DJANGO代码
  8. Hicharts弄个样例
  9. [转贴]C语言复习笔记-17种小算法-解决实际问题
  10. ruby字符串相关方法