我还没写操作1,按理来说60%的数据没有操作1,但是我只有10分为什么
#include <iostream>
#define ll long long
#define MAXX 1000005
using namespace std;
ll a[MAXX],n,q;
class ST{
private:
ll tree[MAXX*4];
ll lazy_add[MAXX*4];
void pushdown(int node,int l,int r){
if(lazy_add[node]){
tree[node*2]+=lazy_add[node];
lazy_add[node*2]+=lazy_add[node];
tree[node*2+1]+=lazy_add[node];
lazy_add[node*2+1]+=lazy_add[node];
lazy_add[node]=0;
}
return;
}
public:
void build(int node,int l,int r){
if(l==r){
tree[node]=a[l];
lazy_add[node]=0;
}
int mid=(l+r)/2;
build(node*2,l,mid);
build(node*2+1,mid+1,r);
tree[node]=max(tree[node*2],tree[node*2+1]);
lazy_add[node]=0;
return;
}
void updaterange_add(int node,int l,int r,int ql,int qr,int k){
if(r<ql||l>qr) return;
if(l>=ql&&r<=qr){
tree[node]+=k;
lazy_add[node]+=k;
return;
}
pushdown(node,l,r);
int mid=(l+r)/2;
updaterange_add(node*2,l,mid,ql,qr,k);
updaterange_add(node*2+1,mid+1,r,ql,qr,k);
tree[node]=max(tree[node*2],tree[node*2+1]);
return;
}
ll query(int node,int l,int r,int ql,int qr){
if(r<ql||l>qr) return 0;
if(l>=ql&&r<=qr) return tree[node];
int mid=(l+r)/2;
ll left=query(node*2,l,mid,ql,qr);
ll right=query(node*2+1,mid+1,r,ql,qr);
return max(left,right);
}
}seg;
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=q;i++){
int op,l,r,k;
cin>>op;
if(op==1){
cin>>l>>r>>k;
}else if(op==2){
cin>>l>>r>>k;
seg.updaterange_add(1,1,n,l,r,k);
}else{
cout<<seg.query(1,1,n,l,r)<<endl;
}
}
return 0;
}
对了如果有空的话教一下操作1怎么弄。 。 。 。 本蒟蒻不会啊