思路:用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
*/

SPOJ 1043 1043. Can you answer these queries I的更多相关文章

  1. 「 SPOJ GSS3 」 Can you answer these queries III

    # 题目大意 GSS3 - Can you answer these queries III 需要你维护一种数据结构,支持两种操作: 单点修改 求一个区间的最大子段和 # 解题思路 一个区间的最大子段 ...

  2. SPOJ 1043 GSS1 - Can you answer these queries I

    题目描述 给出了序列A[1],A[2],-,A[N]. (a[i]≤15007,1≤N≤50000).查询定义如下: 查询(x,y)=max{a[i]+a[i+1]+-+a[j]:x≤i≤j≤y}. ...

  3. spoj 1557 GSS3 - Can you answer these queries III 线段树

    题目链接 给出n个数, 2种操作, 一种是将第x个数改为y, 第二种是询问区间[x,y]内的最大连续子区间. 开4个数组, 一个是区间和, 一个是区间最大值, 一个是后缀的最大值, 一个是前缀的最大值 ...

  4. 【SPOJ - GSS2】Can you answer these queries II(线段树)

    区间连续不重复子段最大值,要维护历史的最大值和当前的最大值,打两个lazy,离线 #include<cstdio> #include<cstring> #include< ...

  5. SPOJ 2916 GSS5 - Can you answer these queries V

    传送门 解题思路 和GSS1相似,但需要巨恶心的分类讨论,对于x1<=y1< x2< =y2 这种情况 , 最大值应该取[x1,y1]的右端最大+[y1+1,x2-1]的和+[x2, ...

  6. SPOJ 1557 GSS2 - Can you answer these queries II (线段树+维护历史最值)

    都说这题是 GSS 系列中最难的,今天做了一下,名副其实 首先你可以想到各种各样的在线乱搞想法,线段树,主席树,平衡树,等等,但发现都不太可行. 注意到题目也没有说强制在线,因此可以想到离线地去解决这 ...

  7. GSS1 spoj 1043 Can you answer these queries I 最大子段和

    今天下午不知道要做什么,那就把gss系列的线段树刷一下吧. Can you answer these queries I 题目:给出一个数列,询问区间[l,r]的最大子段和 分析: 线段树简单区间操作 ...

  8. GSS7 spoj 6779. Can you answer these queries VII 树链剖分+线段树

    GSS7Can you answer these queries VII 给出一棵树,树的节点有权值,有两种操作: 1.询问节点x,y的路径上最大子段和,可以为空 2.把节点x,y的路径上所有节点的权 ...

  9. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  10. SPOJ 1557. Can you answer these queries II 线段树

    Can you answer these queries II Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://www.spoj.com/pr ...

随机推荐

  1. ubuntu杂记

    安装ssh: sudo apt-get install openssh-server sudo /etc/init.d/ssh start 将主机中vmware8的网络改为自动获取ip,就可以ping ...

  2. 大数据量查询优化——数据库设计、SQL语句、JAVA编码

    数据库设计方面: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将 ...

  3. Img图片超过了DIV的最大宽度 解决方案

    在该图片所在的div限定一下里边所有的图片的最大长度,这个长度的值可以是div的长度的略小即可. 例如: <div class="content" style="w ...

  4. 故障模块名称: NetdiskExt64.dll的解决之法

    故障模块名称: NetdiskExt64.dll的解决之法 2013年8月5日 开机,资源管理器报错.详细报错信息如下:   问题签名:   问题事件名称:    APPCRASH   应用程序名:  ...

  5. USACO3.42American Heritage(二叉树)

    已知中前 求后序 递归一下 有一些小细节 /* ID: shangca2 LANG: C++ TASK: heritage */ #include <iostream> #include& ...

  6. BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1002 )*&*(^&*^&*^**()*) 1002: [FJOI20 ...

  7. 【UE】

    1.链接颜色.评论颜色.时间颜色 区分 2.昵称 - 评论 - 时间 用户视线很自然

  8. ☀【组件】getRequest

    → GitHub <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset=&qu ...

  9. -_-#【JS】element.click()

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. XUTils框架的学习(三)

    前面两章说了xutils框架的引入和注解模块的使用和数据库模块的使用,想了解的朋友可以去看看. 前面在说数据库模块的操作的时候是手动创建数据库并保存在asset文件夹里面,再通过I/O将数据库写进应用 ...