9分求调
查看原帖
9分求调
371412
dabawang楼主2024/8/19 16:33
#include<bits/stdc++.h>
using namespace std;
#define N 4*100100
long long a[N];
long long s;
struct shu
{
	long long l,r,tag,num;
}t[N];
void build(long long i,long long l,long long r)
{
	t[i].l=l;
	t[i].r=r;
	if(l==r)
	  return ;
	long long mid=(l+r)/2;
	build(i*2,l,mid);
	build(i*2+1,mid+1,r);
}
long long add(long long i)
{
	if(t[i].l==t[i].r)
	  {
	  	t[i].num=a[t[i].r];
	  	return t[i].num;
	  }
	t[i].num=add(i*2)+add(i*2+1);
	return t[i].num;
}
void push(long long i)
{
	if(t[i].tag>0)
	  {
	  	t[i*2].tag+=t[i].tag;
	  	t[i*2+1].tag+=t[i].tag;
	  	t[i*2].num+=t[i].tag*(t[i*2].r-t[i*2].l+1);
	  	t[i*2+1].num+=t[i].tag*(t[i*2+1].r-t[i*2+1].l+1);
	  	t[i].tag=0;
	  }
}
void danxiu(long long i,long long dis,long long k)
{
	t[i].num+=k;
	if(t[i].l==t[i].r)
	  return ;
	push(i);
	if(dis<=t[i*2].r)
	  danxiu(i*2,dis,k);
	if(t[i*2+1].l<=dis)
	  danxiu(i*2+1,dis,k);
	t[i].num=t[i*2].num+t[i*2+1].num;
}
void quxiu(long long i,long long l,long long r,long long k)
{
	if(l<=t[i].l&&t[i].r<=r)
	  {
	  	t[i].num+=k*(t[i].r-t[i].l+1);
	  	t[i].tag+=k;
	  	return ;
	  }
	push(i);
	if(l<=t[i*2].r)
	  quxiu(i*2,l,r,k);
	if(t[i*2+1].l<=r)
	  quxiu(i*2+1,l,r,k);
	t[i].num=t[i*2].num+t[i*2+1].num;
}
void qucha(long long i,long long l,long long r)
{
	if(l<=t[i].l&&t[i].r<=r)
	  {
	  	s=s+t[i].num;
	  	return ;
	  }
	push(i);
	if(l<=t[i*2].r)
	  qucha(i*2,l,r);
	if(t[i*2+1].l<=r)
	  qucha(i*2+1,l,r);
	t[i].num=t[i*2].num+t[i*2+1].num;
}
int main()
{
	long long n,m;
	cin>>n>>m;
	for(long long i=1;i<=n;i++)
	  cin>>a[i];
	for(long long i=n;i>=2;i--)
	  a[i]=a[i]-a[i-1];
	build(1,1,n);
	add(1);
	for(long long i=1;i<=m;i++)
	  {
	  	long long o;
	  	cin>>o;
	  	if(o==1)
	  	  {
	  	  	long long l,r,k,d;
	  	  	cin>>l>>r>>k>>d;
	  	  	quxiu(1,l,l,k);
	  	  	if(l+1<=r)
	  	  	  quxiu(1,l+1,r,d);
	  	  	if(r+1<=n)
	  	  	  quxiu(1,r+1,r+1,-(k+d*(r-l)));
			}
		else if(o==2)
		  {
		  	long long x;
		  	cin>>x;
		  	s=0;
		  	qucha(1,1,x);
		  	cout<<s<<endl;
		  }
	  }
 } 
2024/8/19 16:33
加载中...