Can you answer these queries(spoj 1043)
2024-09-30 12:47:18
题意:多次查询区间最长连续字段和
/*
用线段树维护区间最长子段和,最长左子段和,最长右子段和。
*/
#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 ;
}
最新文章
- F#之旅0 - 开端
- 不可变数组NSArray
- 各种模板(part 1)
- mysql+mybatis 插入可递增字段库表操作
- JOIN_TAB
- LinQ—Lambda表达式
- [2-sat]HDOJ3622 Bomb Game
- 核心概念 &mdash;&mdash; 契约(Contracts)
- MSP430 中断优先级
- MySQL意外关闭, 导致软件崩溃而无法启动的解决办法
- Eratosthenes,筛法求素数
- C# 获取文件下载的各种方法
- 六大设计原则(三)DIP依赖倒置原则
- 在 DotNetCore 3.0 程序中使用通用协议方式启动文件关联应用
- Vulnerability Scanning
- django中static的坑
- springboot之拦截器
- Cookie知识点总结
- [phvia/firman] PHP多进程服务器模型中的惊群
- python vue 项目
热门文章
- android开发学习 ------- json数据与实体类之间的相互转换
- WIN2003 IIS相关错误解决方案
- springboot之读取配置文件
- 序列化shelve模块
- 生成器的send方法
- iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G
- Handler引起的内存泄露
- Deprecated: Assigning the return value of new by reference is deprecated in报错
- 安装mysql时 make 时 提示 redeclaration of C++ built-in type ‘bool’ 错误
- js函数中获得当前被点击元素