社区讨论

0分求调,帮我找出实质性错误让我过了的我会关注

P4513小白逛公园参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mid6o034
此快照首次捕获于
2025/11/24 21:29
3 个月前
此快照最后确认于
2025/11/24 21:29
3 个月前
查看原帖
样例也输出0
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e6+5;
int n,M,t[N],lm[N],rm[N],m[N],k,a,b;
void pup(int i){
    m[i]=max({m[i*2],m[i*2+1],rm[i*2]+lm[i*2+1]});
    t[i]=t[i*2]+t[i*2+1];
    lm[i]=max(lm[i*2],t[i*2]+lm[i*2+1]);
    rm[i]=max(rm[i*2+1],t[i*2+1]+rm[i*2]);
}
void buid(int l,int r,int i){
    if(l==r){cin>>t[i];lm[i]=rm[i]=m[i]=t[i];return;}
    lm[i]=rm[i]=m[i]=LLONG_MIN;
    int mid=l+(r-l)/2;
    buid(l,mid,i*2);
    buid(mid+1,r,i*2+1);
    pup(i);
}
void upd(int op,int k,int l,int r,int i){
    if(l==r){lm[i]=rm[i]=m[i]=t[i]=k;return;}
    int mid=l+(r-l)/2;
    if(op<=mid)upd(op,k,l,mid,i*2);
    else upd(op,k,mid+1,r,i*2+1);
    pup(i);
}
int qry(int kl,int kr,int l,int r,int i){
    if(kl<=l&&r<=kr){return max({rm[i*2]+lm[i*2+1],m[i*2],m[i*2+1]});}
    int mid=l+(r-l)/2,num=0;
    if(kl<=mid)num=max(num,qry(kl,kr,l,mid,i*2));
    if(kr>mid)num=max(num,qry(kl,kr,mid+1,r,i*2+1));
    return num;
}
signed main(){
    cin>>n>>M;
    buid(1,n,1);
    for(int i=1;i<=M;i++){
        cin>>k>>a>>b;
        if(k==1){
            if(a>b)swap(a,b);
            cout<<qry(a,b,1,n,1)<<'\n';
        }else{
            upd(a,b,1,n,1);
        }
    }
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...