求助树状数组 样例能过 但是全WA 看别人的题解没找到问题
查看原帖
求助树状数组 样例能过 但是全WA 看别人的题解没找到问题
769809
3114193270a楼主2022/10/15 12:41
#include <bits/stdc++.h>
using namespace std;
const int N=500010;
typedef long long ll;
int n,m;
ll c[N],cc[N];
ll last,x;
int lowbit(int i)
{
	return i&(-i);
}
void add(ll i,ll k)
{
	for(int j=i;j<=n;j+=lowbit(j))
	{
		c[j]+=k,cc[j]+=i*k;
	}
}
void range_add(ll l,ll r,ll k)
{
	add(l,k),add(r+1,-k);
}
ll ask(ll i)
{
	ll ans=0;
	for(int j=i;j;j-=lowbit(j))
	{
		ans+=(c[j]*(i+1)-cc[j]);
	}
	return ans;
}
ll range_ask(ll l,ll r) {return ask(r)-ask(l-1);}
int main(void)
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>x;
		range_add(i,i,x-last);
		last=x;
	}
	while(m--)
	{
		ll t,l,r,k;
		cin>>t;
		if(t==1)
		{
			cin>>l>>r>>k;
			range_add(l,r,k);
		}
		else if(t==2||t==3)
		{
			cin>>k;
			if(t==2) range_add(1,1,k);
			else range_add(1,1,-k);
		}
		else if(t==4)
		{
			cin>>l>>r;
			cout<<range_ask(l,r)<<endl;
		}
		else
		{
			cout<<range_ask(1,1)<<endl;
		}
	}
	return 0;
} 
2022/10/15 12:41
加载中...