题意:多次查询区间最长连续字段和

/*
用线段树维护区间最长子段和,最长左子段和,最长右子段和。
*/
#include<cstdio>
#include<iostream>
#define N 50010
using namespace std;
int a[N],s[N],sum[N*],lsum[N*],rsum[N*],n,m;
void push_up(int k,int l,int r){
int mid=l+r>>;
lsum[k]=max(lsum[k*],s[mid]-s[l-]+lsum[k*+]);
rsum[k]=max(rsum[k*+],rsum[k*]+s[r]-s[mid]);
sum[k]=max(max(sum[k*],sum[k*+]),rsum[k*]+lsum[k*+]);
sum[k]=max(max(sum[k*],sum[k*+]),rsum[k*]+lsum[k*+]);
}
void build(int l,int r,int k){
int mid=l+r>>;
if(l==r){
sum[k]=lsum[k]=rsum[k]=a[l];
return;
}
build(l,mid,k*);
build(mid+,r,k*+);
push_up(k,l,r);
}
int query_l(int l,int r,int k,int x,int y){//询问最长左子段和
if(l==x&&r==y)return lsum[k];
int mid=l+r>>;
if(y<=mid) return query_l(l,mid,k*,x,y);
else {
return max(lsum[k*],s[mid]-s[l-]+query_l(mid+,r,k*+,mid+,y));
}
}
int query_r(int l,int r,int k,int x,int y){//询问最长右子段和
if(l==x&&r==y)return rsum[k];
int mid=l+r>>;
if(x>mid) return query_r(mid+,r,k*+,x,y);
else {
return max(rsum[k*+],s[r]-s[mid]+query_r(l,mid,k*,x,mid));
}
}
int query(int l,int r,int k,int x,int y){
if(l==x&&r==y) return sum[k];
int mid=l+r>>;
if(y<=mid)return query(l,mid,k*,x,y);
else if(x>mid) return query(mid+,r,k*+,x,y);
else {
int ls=query_r(l,mid,k*,x,mid);
int rs=query_l(mid+,r,k*+,mid+,y);
return max(max(query(l,mid,k*,x,mid),query(mid+,r,k*+,mid+,y)),ls+rs);
}
}
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&a[i]),s[i]=s[i-]+a[i];
build(,n,);
scanf("%d",&m);
for(int i=;i<=m;i++){
int x,y;scanf("%d%d",&x,&y);
printf("%d\n",query(,n,,x,y));
}
return ;
}

最新文章

  1. F#之旅0 - 开端
  2. 不可变数组NSArray
  3. 各种模板(part 1)
  4. mysql+mybatis 插入可递增字段库表操作
  5. JOIN_TAB
  6. LinQ—Lambda表达式
  7. [2-sat]HDOJ3622 Bomb Game
  8. 核心概念 &mdash;&mdash; 契约(Contracts)
  9. MSP430 中断优先级
  10. MySQL意外关闭, 导致软件崩溃而无法启动的解决办法
  11. Eratosthenes,筛法求素数
  12. C# 获取文件下载的各种方法
  13. 六大设计原则(三)DIP依赖倒置原则
  14. 在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
  15. Vulnerability Scanning
  16. django中static的坑
  17. springboot之拦截器
  18. Cookie知识点总结
  19. [phvia/firman] PHP多进程服务器模型中的惊群
  20. python vue 项目

热门文章

  1. android开发学习 ------- json数据与实体类之间的相互转换
  2. WIN2003 IIS相关错误解决方案
  3. springboot之读取配置文件
  4. 序列化shelve模块
  5. 生成器的send方法
  6. iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G
  7. Handler引起的内存泄露
  8. Deprecated: Assigning the return value of new by reference is deprecated in报错
  9. 安装mysql时 make 时 提示 redeclaration of C++ built-in type ‘bool’ 错误
  10. js函数中获得当前被点击元素