DYF2765491381672943 @ 2024-11-01 20:43:45
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
int dp[1000050],lazy[1000050],a[100050],n,q;
void build(int s,int t,int p)
{
if (s==t)
{
dp[p]=a[s];
return;
}
int m=s+((t-s)>>1);
build(s,m,p*2);build(m+1,t,p*2+1);
dp[p]=dp[p*2]+dp[p*2+1];
return;
}
int find(int l,int r,int s,int t,int p)
{
if (s>=l&&t<=r)return dp[p];
int tmp=0;
int m=s+((t-s)>>1);
if (lazy[p])
{
dp[p*2]+=lazy[p]*(m-s+1);
dp[p*2+1]+=lazy[p]*(t-m);
lazy[p*2]+=lazy[p];
lazy[p*2+1]+=lazy[p];
lazy[p]=0;
}
if (m>=l)tmp+=find(l,r,s,m,p*2);
if (m<r)tmp+=find(l,r,m+1,t,p*2+1);
return tmp;
}
void add(int l,int r,int s,int t,int p,int k)
{
if (l<=s&&t<=r)
{
dp[p]+=k*(t-s+1);lazy[p]+=k;
return;
}
int m=s+((t-s)>>1);
if (lazy[p]&&s!=t)
{
dp[p*2]+=lazy[p]*(m-s+1);
dp[p*2+1]+=lazy[p]*(t-m);
lazy[p*2]+=lazy[p];
lazy[p*2+1]+=lazy[p];
lazy[p]=0;
}
if (m>=l){add(l,r,s,m,p*2,k);}
if (m<r){add(l,r,m+1,t,p*2+1,k);}
dp[p]=dp[p*2]+dp[p*2+1];
return;
}
void test(int s,int t,int p)
{
int m=s+((t-s)>>1);
if (s!=t)
{
test(s,m,p*2);
test(m+1,t,p*2+1);
}
return;
}
signed main()
{
cin>>n>>q;
for (int i=1;i<=n;i++)cin>>a[i];
build(1,n,1);
for (int i=1;i<=n;i++)
{
int x;
cin>>x;
if (x==1)
{
int l,r,k;
cin>>l>>r>>k;
add(l,r,1,n,1,k);
}
if (x==2)
{
int l,r;
cin>>l>>r;
cout<<find(l,r,1,n,1)<<endl;
}
}
return 0;
}
by DYF2765491381672943 @ 2024-11-08 20:39:16
已AC,此贴结