求助求助!!!!!!
查看原帖
求助求助!!!!!!
1007282
hehaorui楼主2024/6/1 16:37

只有#1对了

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m;
ll b[100005],c[100005],c1[100005];
ll lowbit[100005];
void add(ll x,ll k)
{
	ll t=x-1;
	while(x<=n)
	{
		c[x]+=k;
		c1[x]+=t*k;
		x+=lowbit[x];
	}
	return ;
}
ll ask(ll x)
{
	ll t=x;
	ll sum=0;
	while(x>0)
	{
		sum+=((t*c[x])-c1[x]);
		x-=lowbit[x];
	}
	return sum;
}
int main()
{
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++)
		lowbit[i]=i&-i;
	int last=0;
	for(int i=1;i<=n;i++)
	{
		ll x;
		scanf("%lld",&x);
		b[i]=x-last;
		last=x;
		if(i==n)
			b[i+1]=-x;
	}
//	cout<<"b";
	for(int i=1;i<=n;i++)
	{
		add(i,b[i]-b[i-1]);
//		cout<<b[i]-b[i-1]<<" ";
//		cout<<1<<endl;
	}
//	cout<<endl;v
	while(m--)
	{
		int opt;
		scanf("%d",&opt);
		if(opt==1)
		{
			ll l,r,k,d;
			scanf("%lld%lld%lld%lld",&l,&r,&k,&d);
			if(l>r)
				swap(l,r);
			if(l==r)
			{
				add(l,k);
				add(r+1,-k);
			}
			else
			{
				add(l,k);
				ll cnt;
				cnt=d-k;
				add(l+1,cnt);
				add(r+1,-((r-l)*k+d));
			}
		}
		else
		{
			ll x;
			scanf("%lld",&x);
			cout<<ask(x)<<"\n";
		}
	}
	return 0;
}
2024/6/1 16:37
加载中...