救,有人用线段树动态开的吗?
查看原帖
救,有人用线段树动态开的吗?
701253
fulinran2026楼主2024/1/23 16:58

不要说用树状数组做阿里嘎多,我已经过了

#include<bits/stdc++.h>
#define LL long long
using namespace std;

const int N=5e5+5;

LL n,m,ans;
LL a[N],s[N],c[N];

LL lowbit(int k) {return k&(-k);}

void change(int x,int k)
{
	for(int i=x;i<=n;i+=lowbit(i))
		c[i]+=k;
}

LL Sum(int x)
{
	int s=0;
	for(int i=x;i>0;i-=lowbit(i))
		s+=c[i];
	return s;
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		s[i]=s[i-1]+a[i];
	}
	for(int i=1;i<=n;i++)
	{
		c[i]=s[i]-s[i-lowbit(i)];
	}
	for(int i=1;i<=m;i++)
	{
		int Num,x,y,k;
		scanf("%d",&Num);
		if(Num==1)
		{
			scanf("%d%d",&x,&k);
			a[x]+=k;
			change(x,k);
		}
		if(Num==2)
		{
			scanf("%d%d",&x,&y);
			printf("%d\n",Sum(y)-Sum(x-1));
		}
	}
	return 0;
}

谢谢大佬!!!

2024/1/23 16:58
加载中...