一晚上了,0分求调
查看原帖
一晚上了,0分求调
1270559
zkhehe楼主2025/7/29 21:26
#include <bits/stdc++.h>
#define ppiipii pair<pair<int,int>,pair<int,int> >
#define f first
#define s second
using namespace std;
int n,m,k;
int sum[1000005];
int mx[1000005];
int lmx[1000005];
int rmx[1000005];
void upd(int u,int val){
	sum[u]=mx[u]=lmx[u]=rmx[u]=val;
	u/=2;
	while(u){
		sum[u]=sum[u*2]+sum[u*2+1];
		mx[u]=max(max(mx[u*2],mx[u*2+1]),rmx[u*2]+lmx[u*2+1]);
		lmx[u]=max(lmx[u*2],sum[u*2]+lmx[u*2+1]);
		rmx[u]=max(rmx[u*2+1],sum[u*2+1]+rmx[u*2]);
		u/=2;
	}
}
ppiipii find(int l,int r,int sl,int sr,int u){
	if(r<sl||l>sr)return {{0,0},{0,0}};
	if(l>=sl&&r<=sr)return {{sum[u],mx[u]},{lmx[u],rmx[u]}};
	int mid=(r-l+1)/2;
	ppiipii t1=find(l,m,sl,sr,u*2),t2=find(m+1,r,sl,sr,u*2+1);
	return {{t1.f.f+t2.f.f,max(max(t1.f.s,t2.f.s),t1.s.s+t2.s.f)},{max(t1.s.f,t1.f.f+t2.s.f),max(t2.s.s,t2.f.f+t1.s.s)}};
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=(1<<19);i<(1<<19)+n;i++){
		scanf("%d",&sum[i]);
		mx[i]=lmx[i]=rmx[i]=sum[i];
	}
	for(int i=(1<<19)-1;i>=1;i--){
		sum[i]=sum[i*2]+sum[i*2+1];
		mx[i]=max(max(mx[i*2],mx[i*2+1]),rmx[i*2]+lmx[i*2+1]);
		lmx[i]=max(lmx[i*2],sum[i*2]+lmx[i*2+1]);
		rmx[i]=max(rmx[i*2+1],sum[i*2+1]+rmx[i*2]);
	}
	for(int i=1;i<=m;i++){
		scanf("%d",&k);
		int a,b;
		scanf("%d%d",&a,&b);
		if(k&1){
			printf("%d",find(1,(1<<19),a,b,1));
		}
		else{
			upd((1<<19)-1+a,b);
		}
	}
	return 0;
}

2025/7/29 21:26
加载中...