来自一个蒟蒻的问题
查看原帖
来自一个蒟蒻的问题
222104
_yjh楼主2021/10/23 12:40
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read() {
	ll x=0,f=1;char ch=getchar();
	while(!isdigit(ch)) {if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch)) {x=x*10+ch-48;ch=getchar();}
	return x*f;
}
ll n,m,sum,k,a[100005],Node[400005],lazy[400005];
void Push(int t,int len) {
	if(lazy[t]) {
		lazy[2*t]+=lazy[t];
		lazy[2*t+1]+=lazy[t];
		Node[2*t]+=(len-len/2)*lazy[t];
		Node[2*t+1]+=len/2*lazy[t];
		lazy[t]=0;
	}
}
void Build(int t,int l,int r) {
	if(l==r) {
		Node[t]=a[l];
		return ;
	}
	int mid=(l+r)/2;
	Build(2*t,l,mid);
	Build(2*t+1,mid+1,r);
	Node[t]=Node[2*t]+Node[2*t+1];
}
void Query(int t,int l,int r,int ll,int rr) {
	if(ll<=l&&r<=rr) {
		sum+=Node[t];
		return ;
	}
	Push(t,r-l+1);
	int mid=(l+r)/2;
	if(ll<=mid) Query(2*t,l,mid,ll,rr);
	if(rr>=mid+1) Query(2*t+1,mid+1,r,ll,rr);
}
void Add(int t,int l,int r,int ll,int rr,int k) {
	if(ll<=l&&r<=rr) {
		Node[t]+=(r-l+1)*k;
		lazy[t]+=k;
		return ;
	}
	Push(t,r-l+1);
	int mid=(l+r)/2;
	if(ll<=mid) Add(2*t,l,mid,ll,rr,k);
	if(rr>=mid+1) Add(2*t+1,mid+1,r,ll,rr,k);
	Node[t]=Node[2*t]+Node[2*t+1];
}
int main() {
	n=read();m=read();
	for(int i=1;i<=n;i++) a[i]=read();
	Build(1,1,n);
	while(m--) {
		ll t=read(),ll=read(),rr=read();
		if(t==1) {
			ll ;k;
			k=read();
			Add(1,1,n,ll,rr,k);
		}
		else {
			sum=0;
			Query(1,1,n,ll,rr);
			cout<<sum<<'\n';
		}
	}
	return 0;
}

这一句ll ;k; 为什么在k前面加一个;才能过编译啊yun

2021/10/23 12:40
加载中...