zyt__dp @ 2024-09-25 18:56:54
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e7+7;
int n,m,a[N],f[N];
void jianshu(int k,int l,int r)
{
if(l==r){
f[k]=a[l];
return ;
}
int m=(l+r)/2;
jianshu(k+k,l,m);
jianshu(k+k+1,m+1,r);
f[k]=f[k+k]+f[k+k+1];
}
void add1(int k,int l,int r,int x,int y,int p)
{
//f[k]+=(r-l)*p;
if(x<=l&&r<=y){
f[k]+=(r-l+1)*p;
return ;
}
{
return ;
}
int m=(l+r)>>1;
if(x<=m){
add1(k+k,l,m,x,y,p);
}
if(y>m)add1(k+k+1,m+1,r,x,y,p);
f[k]=f[k+k]+f[k<<1+1];
}
int ans(int k,int l,int r,int s,int t)
{
if(l==s&&r==t)return f[k];
int m=(l+r)/2;
if(t<=m)
{
return ans(k+k,l,m,s,t);
}
else{
if(s>m)return ans(k+k+1,m+1,r,s,t);
else{
return ans(k+k,l,m,s,m)+ans((k+k+1),m+1,r,m+1,t);
}
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
jianshu(1,1,n);
for(int i=1;i<=m;i++)
{
int t,x,y,k;cin>>t;
if(t==1)
{
cin>>x>>y>>k;
add1(1,1,n,x,y,k);
}
else
{
cin>>x>>y;
cout<<ans(1,1,n,x,y)<<endl;
}
}
}
wa了 求调
by Phoenix2010 @ 2024-09-25 19:48:14
建议重新学一下懒标记