区间修改线段树(线段树1)WA掉了,求大佬帮忙。
  • 板块学术版
  • 楼主do_while_false
  • 当前回复5
  • 已保存回复5
  • 发布时间2020/7/27 15:20
  • 上次更新2023/11/6 22:06:57
查看原帖
区间修改线段树(线段树1)WA掉了,求大佬帮忙。
320832
do_while_false楼主2020/7/27 15:20
#include<bits/stdc++.h>
#define MAXN 500000 + 10
#define ll long long
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)

using namespace std;

struct node{
	ll l,r,sum,tag;
}tree[MAXN<<2];
ll n,m,ans;
int opt,x,y;

inline ll read() {
	ll r=0;bool flag=true;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') flag=false;ch=getchar();}
	while(ch>='0'&&ch<='9'){r=(r<<3)+(r<<1)+(ch^48);ch=getchar();}
	return flag==true?r:~r+1;
}

inline void write(ll x) {
	char ch[40];int len=0;
	if(x<0){putchar(45);x=~x+1;}
	do{ch[len++]=x%10+48;x/=10;}while(x>0);
	for(int i=len-1;i>=0;i--) putchar(ch[i]);
	putchar('\n');
}

inline void pushup(ll x) {
	tree[x].sum=tree[ls(x)].sum+tree[rs(x)].sum;
}

inline void pushdown(ll x) {
	if(tree[x].tag) {
		ll p=tree[x].tag;
		tree[x].tag=0;
		tree[ls(x)].tag+=p;
		tree[rs(x)].tag+=p;
		tree[ls(x)].sum+=(tree[ls(x)].r-tree[ls(x)].l+1)*p;
		tree[rs(x)].sum+=(tree[rs(x)].r-tree[rs(x)].l+1)*p;
	}
}

inline void build(ll l,ll r,ll x) {
	tree[x].l=l;
	tree[r].r=r;
	if(l==r) {
		tree[x].sum=read();
		return;
	}
	ll mid=(l+r)>>1;
	build(l,mid,ls(x));
	build(mid+1,r,rs(x));
	pushup(x);
}

inline void query(ll l,ll r,ll x) {
	if(l<=tree[x].l&&tree[x].r<=r) {
		ans+=tree[x].sum;
		return;
	}
	pushdown(x);
	ll mid=(tree[x].l+tree[x].r)>>1;
	if(mid>=l) query(l,r,ls(x));
	if(mid<r) query(l,r,rs(x)); 
}

inline void change(ll l,ll r,ll x,ll v) {
	if(l<=tree[x].l&&tree[x].r<=r) {
		tree[x].sum+=(tree[x].r-tree[x].l+1)*v;
		tree[x].tag+=v;
		return;
	}
	pushdown(x);
	ll mid=(tree[x].l+tree[x].r)>>1;
	if(mid>=l) change(l,r,ls(x),v);
	if(mid<r) change(l,r,rs(x),v);
	pushup(x);
}

int main(void) {
	cin>>n>>m;
	build(1,n,1);
	while(m--) {
		opt=read();x=read();y=read();
		if(opt==1) {
			ll k;k=read();
			change(x,y,1,k);
		}
		else {
			ans=0;
			query(x,y,1);
			write(ans);
		}
	}
	return 0;
}

原题 P3312

想温习一下线段树,却WA掉了,找了两小时也没查出来错,求大佬帮忙(^_^)qwq。

2020/7/27 15:20
加载中...