WA20pts,悬关求助
查看原帖
WA20pts,悬关求助
1070708
Caged_Bird楼主2024/5/4 11:56
#include<bits/stdc++.h>
using namespace std;
struct node{
	long long s,t,v,p;//s->start,t->end,v->value,p->lazy_tag
};
long long n,m,a[100005],ans; 
node rt[400005];
void push_down(long long now){
	rt[now*2].v+=rt[now].p*(rt[now*2].t-rt[now*2].s+1);
	rt[now*2].p=rt[now].p;
	rt[now*2+1].v+=rt[now].p*(rt[now*2+1].t-rt[now*2+1].s+1);
	rt[now*2+1].p=rt[now].p;
	rt[now].p=0;
}
void build(long long l,long long r,long long now){
	rt[now].s=l;
	rt[now].t=r;
	rt[now].p=0;
	if(l==r){
		rt[now].v=a[l];
		return;
	}
	long long m=(l+r)/2;
	build(l,m,now*2);
	build(m+1,r,now*2+1);
	rt[now].v=rt[now*2].v+rt[now*2+1].v;
}
void modify(long long l,long long r,long long now,long long k){
	if(rt[now].s>=l&&rt[now].t<=r){
		rt[now].v+=k*(rt[now].t-rt[now].s+1);
		rt[now].p+=k;
		return;
	}
	if(rt[now].t<l||rt[now].s>r)return;
	if(rt[now].p)push_down(now); 
	modify(l,r,now*2,k);
	modify(l,r,now*2+1,k);
	rt[now].v=rt[now*2].v+rt[now*2+1].v;
}
void query(long long l,long long r,long long now){
	if(rt[now].s>=l&&rt[now].t<=r){
		ans+=rt[now].v;
		return;
	}
	if(rt[now].t<l||rt[now].s>r)return;
	if(rt[now].p)push_down(now); 
	query(l,r,now*2);
	query(l,r,now*2+1);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,n,1);
	for(long long i=1;i<=m;i++){
		long long op,l,r,k;
		ans=0;
		cin>>op>>l>>r;
		if(op==2){
			query(l,r,1);
			cout<<ans<<endl;
		}
		else{
			cin>>k;
			modify(l,r,1,k);
		}
	}
	return 0;
}

错的地方全比正解少一,加一完输出全wa

2024/5/4 11:56
加载中...