救救孩子!!!在线急等
查看原帖
救救孩子!!!在线急等
539342
Vuglar_zuo楼主2023/8/6 16:07

样例没过QWQ

#include<bits/stdc++.h>
using namespace std;
struct data
{
	long long l;
	long long r;
	long long x;
};
data total[400004];
void build(long long l,long long r,long long id)
{
	total[id].l=l;
	total[id].r=r;
	if(l==r)
	{
		cin>>total[id].x;
		return;
	}
	long long mid=(l+r)/2;
	build(l,mid,id*2);
	build(mid+1,r,id*2+1);
	total[id].x=(total[id*2].x+total[id*2+1].x);
}

void updatetree(int x,int y,int id,int k)
{
	if(total[id].l==total[id].r)
    {
		total[id].x=total[id].x+k;
        return;
    }
	int mid=(total[id].l+total[id].r)/2;
	if(x<=mid)
	{
		updatetree(x,y,id*2,k);
	}
	else
	{
		updatetree(x,y,id*2+1,k);	
	}
	int ans1=total[id*2].x;
	int ans2=total[id*2+1].x;
	total[id].x=max(ans1,ans2);
}

long long tree1(long long l,long long r,long long id)
{
	if(total[id].l>=l&&total[id].r<=r)
	{
		return total[id].x;
	}
	long long maxx=0;
	long long mid=(total[id].l+total[id].r)/2;
	if(l<=mid)maxx+=(tree1(l,r,id*2));
	if(r>mid)maxx+=(tree1(l,r,id*2+1));
	return maxx;
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	long long n,m,a,b,c,k;
	cin>>n>>m;
	build(1,n,1);
	for(long long i=1;i<=m;i++)
	{
		cin>>c;
		if(c==1)
		{
			cin>>a>>b>>k;
			updatetree(a,b,1,k);
		}
		else if(c==2)
		{
			cin>>a>>b;
			cout<<tree1(a,b,1)<<endl;
		}
	}
	return 0;
}
2023/8/6 16:07
加载中...