样例没过,卒
查看原帖
样例没过,卒
955954
Miracle_InDream楼主2025/2/5 11:19
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int A[N];
int Sum[4*N];
int n,m;
int Add[(N<<2)+10];
void PushUp(int rt)
{
	Sum[rt]=Sum[rt<<1]+Sum[rt<<1|1];
}
void PushDown(int rt,int ln,int rn)
{
	if(Add[rt])
	{
		Add[rt<<1]+=Add[rt];
		Add[rt<<1|1]+=Add[rt];
		Sum[rt<<1]+=Add[rt]*ln;
		Sum[rt<<1|1]+=Add[rt]*rn;
		Add[rt]=0;
	}
}
void Build(int l,int r,int rt)
{
	if(l==r)
	{
		Sum[rt]=A[r];
		return;
	}
	int m=(l+r)>>1;
	Build(l,m,rt<<1);
	Build(m+1,r,rt<<1|1);
	PushUp(rt);
}
int Update(int L,int R,int C,int l,int r,int rt)
{
	if(L<=l&&r<=R)
    {
    	return Sum[rt];
    }
    int m=(l+r)>>1;
    PushDown(rt,l,r);
    if(L<=m)
    {
    	Update(L,R,C,l,m,rt<<1);
	}
	if(R>m)
    {
    	Update(L,R,C,m+1,r,rt<<1|1);
	}
	PushUp(rt);
}
int Query(int L,int R,int l,int r,int rt)
{
	if(L<=l&&r<=R)
    {
    	return Sum[rt];
    }
    int m=(l+r)>>1;
    PushDown(rt,l,r);
    int ANS=0;
    if(L<=m)
    {
    	ANS+=Query(L,R,l,m,rt<<1);
	}
	if(R>m)
    {
    	ANS+=Query(L,R,m+1,r,rt<<1|1);
	}
	return ANS;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>A[i];
	}
	Build(1,n,1);
	for(int i=1;i<=m;i++)
	{
		int a,x;
		cin>>a>>x;
		if(a==1)
		{
			int y,k;
			cin>>y>>k;
			Update(x,y,k,1,n,1);
		}
		else
		{
			int y;
			cin>>y;
			cout<<Query(x,y,1,n,1)<<endl;
		}
	}
	return 0;
}
2025/2/5 11:19
加载中...