全WA求助,死活不知道哪里错了,希望大佬指正
  • 板块P2357 守墓人
  • 楼主Bicer
  • 当前回复14
  • 已保存回复14
  • 发布时间2021/1/21 21:08
  • 上次更新2023/11/5 04:34:58
查看原帖
全WA求助,死活不知道哪里错了,希望大佬指正
381607
Bicer楼主2021/1/21 21:08
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,f,sum[1000008],a[1000008];
void build(ll l,ll r,ll pos){
	if(l==r){
		sum[pos]=a[r];
		return ;
	}
	ll mid=(l+r)>>1;
	build(l,mid,pos<<1);
	build(mid+1,r,pos<<1|1);
	sum[pos]=sum[pos<<1]+sum[pos<<1|1];
}
void add(ll l,ll r,ll pos,ll x,ll y,ll k){
	if(x>=l&&y<=r){
		sum[pos]+=k;
		return ;
	} 
	ll mid=(l+r)>>1;
	if(mid>=x) add(l,mid,pos<<1,x,y,k);
	if(mid<y) add(mid+1,r,pos<<1|1,x,y,k);
	sum[pos]=sum[pos<<1]+sum[pos<<1|1];
}
ll find_sum(ll l,ll r,ll pos,ll x,ll y){
	if(x>=l&&r<=y) return sum[pos];
	ll mid=(l+r)>>1;
	ll ans=0;
	if(mid>=x) ans+=find_sum(l,mid,pos<<1,x,y);
	if(mid<y) ans+=find_sum(mid+1,r,pos<<1|1,x,y);
	return ans;
}
int main(){
	scanf("%lld%lld",&n,&f);
	for(ll i=1;i<=n;i++) scanf("%lld",&a[i]);
	build(1,n,1);
	ll st=0;
	for(ll i=1;i<=f;i++){
		ll num,k,l,r;
		scanf("%lld",&num);
		if(num==1){
			scanf("%lld%lld%lld",&l,&r,&k);
			add(1,n,1,l,r,k);
		}
		if(num==2){
			scanf("%lld",&k);
			st+=k;
		}
		if(num==3){
			scanf("%lld",&k);
			st-=k;
		}
		if(num==4){
			scanf("%lld%lld",&l,&r);
			printf("%lld\n",find_sum(1,n,1,l,r)+(l==1)*st);
		}
		if(num==5){
			ll c=find_sum(1,n,1,1,1);
			cout<<c+st<<endl;
		}
	}
} 
2021/1/21 21:08
加载中...