#include<cstdio>
#include<iostream>
#define lc k<<1
#define rc k<<1|1
using namespace std;
const int M=1e5+5,N=M<<2;
struct sgtment{
int sum,gss,lgss,rgss;
}tr[N];
int n,m,a[N];
void updata(int k){
tr[k].sum=tr[lc].sum+tr[rc].sum;
tr[k].lgss=max(tr[lc].lgss,tr[lc].sum+tr[rc].lgss);
tr[k].rgss=max(tr[rc].rgss,tr[rc].sum+tr[lc].rgss);
tr[k].gss=max(max(tr[lc].gss,tr[rc].gss),tr[lc].rgss+tr[rc].lgss);
}
void build(int k,int l,int r){
if(l==r){
tr[k].sum=tr[k].gss=tr[k].lgss=tr[k].rgss=a[l];
return ;
}
int mid=l+r>>1;
build(lc,l,mid);
build(rc,mid+1,r);
updata(k);
}
void change(int k,int l,int r,int pos,int val){
if(l==r){
tr[k].sum=tr[k].gss=tr[k].lgss=tr[k].rgss=val;
return ;
}
int mid=l+r>>1;
if(pos<=mid) change(lc,l,mid,pos,val);
else change(rc,mid+1,r,pos,val);
updata(k);
}
sgtment query(int k,int l,int r,int x,int y){
if(l==x&&r==y) return tr[k];
int mid=l+r>>1;
if(y<=mid) return query(lc,l,mid,x,y);
else if(x>mid) return query(rc,mid+1,r,x,y);
else{
sgtment left,right,result;
left=query(lc,l,mid,x,mid);
right=query(rc,mid+1,r,mid+1,y);
result.sum=left.sum+right.sum;
result.lgss=max(left.lgss,left.sum+right.lgss);
result.rgss=max(right.rgss,right.sum+left.rgss);
result.gss=max(max(left.gss,right.gss),left.rgss+right.lgss);
return result;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
build(1,1,n);
scanf("%d",&m);
for(int i=1,opt,x,y;i<=m;i++){
scanf("%d%d%d",&opt,&x,&y);
if(opt) printf("%d\n",query(1,1,n,x,y).gss);
else change(1,1,n,x,y);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术