70分,#8到#10WA,不解
查看原帖
70分,#8到#10WA,不解
307109
ysahasjacku楼主2022/7/19 15:54
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll n,m,x,y,p,k,a[100005],t[100005*4],la[100005*4];

void pushup(int id){
	t[id]=t[id*2]+t[id*2+1];
}

void pushdown(int id,int l,int r){
	if(la[id]){
      ll mid=(l+r)>>1;
      la[id*2]+=la[id];
	  la[id*2+1]+=la[id];
    
      t[id*2]+=(mid-l+1)*la[id];
      t[id*2+1]+=(r-mid)*la[id];
   
      la[id]=0;
    }
  	
  	
}

void build(int id,int l,int r){
  //	la[id]=0;
	if(l==r){
      t[id]=a[l];
      return ;
    }
  	
  	ll mid=(l+r)>>1;
  	build(id*2,l,mid);
  	build(id*2+1,mid+1,r);
  	pushup(id);
}

void inupdate(int id,int l,int r,int x,int y,int v){
	if(x<=l&&r<=y){
      la[id]+=v;
      t[id]+=(r-l+1)*v;
      return ;
    }
    pushdown(id,l,r);
  	
  	ll mid=(l+r)>>1;
  	if(x<=mid)
      inupdate(id*2,l,mid,x,y,v);
  	if(y>mid)
      inupdate(id*2+1,mid+1,r,x,y,v);
    
  	pushup(id);
}

inline int read()
{
    int t=0,f=1;
    char c=getchar();
    while(c>'9'||c<'0')
    {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c<='9'&&c>='0')
        t=t*10+c-'0',c=getchar();
    return t*f;
}

int qsum(int id,int l,int r,int x,int y){
  	
	if(x<=l&&y>=r){
      return t[id];
    }
  	
  	pushdown(id,l,r);
  	ll mid=(l+r)>>1;
	ll ans=0;  
		
  	if(x<=mid)
      ans+=qsum(id*2,l,mid,x,y);
  	if(y>mid)
      ans+=qsum(id*2+1,mid+1,r,x,y);
  
  //	pushup(id);
  
  	return ans;
}

int main(){
//	freopen("P3372_8.in","r",stdin);
//	freopen("1.out","w",stdout);
	n=read(),m=read();
  	for(int i=1;i<=n;i++) a[i]=read();
  	build(1,1,n);
  	for(int i=1;i<=m;i++){
      p=read();
      if(p==1) {
        x=read(),y=read(),k=read();
        inupdate(1,1,n,x,y,k);
      }
      if(p==2){
        x=read(),y=read();
        printf("%lld\n",qsum(1,1,n,x,y));
      }
    }
}

没看出来错哪,求助

2022/7/19 15:54
加载中...