停止工作了,求助

P3372 【模板】线段树 1

@[_LePetitPrince_](/user/255169) 是指本地停止工作了吗
by CISC_qwq @ 2023-08-04 16:13:50


@[Chtholly_is_so_cute](/user/564694) 是
by __LePetitPrince__ @ 2023-08-04 16:18:45


@[_LePetitPrince_](/user/255169) 你先交上去试试,不通过我再告诉你
by CISC_qwq @ 2023-08-04 16:20:03


@[Chtholly_is_so_cute](/user/564694) 全 RE 啊
by __LePetitPrince__ @ 2023-08-04 16:21:04


@[_LePetitPrince_](/user/255169) 没来得及看,你先对照检查一下: ```cpp #include<bits/stdc++.h> #define int long long #define cal int mid = (l + r) / 2,lchild = root * 2,rchild = root * 2 + 1; #define upd tree[root].val = tree[lchild].val + tree[rchild].val; using namespace std; const int N = 1e6 + 9,ROOT = 1; int a[N]; struct node { int val,add; } tree[N]; int len(int l,int r){ return r - l + 1; } void push_down(int root,int l,int r){ cal; tree[lchild].val += tree[root].add * len(l,mid) ; tree[rchild].val += tree[root].add * len(mid + 1,r); tree[lchild].add += tree[root].add; tree[rchild].add += tree[root].add; tree[root].add = 0; } void build(int l,int r,int root) { if(l == r) { tree[root].val = a[l]; return; } cal build(l,mid,lchild); build(mid + 1,r,rchild); upd } void add_update(int s,int t,int l,int r,int root,int add) { //[s,t]表示查询区间 if(s <= l && r <= t) { //当前区间为更新区间的子集,直接返回当前区间和 tree[root].val += (r - l + 1) * add; tree[root].add += add; return; } cal push_down(root,l,r); if(s <= mid) add_update(s,t,l,mid,lchild,add); if(t > mid) add_update(s,t,mid + 1,r,rchild,add); upd } int getsum(int s, int t, int l, int r, int root) { if(s <= l && r <= t) //当前区间为求和区间的子集,直接返回当前区间和 return tree[root].val; cal push_down(root,l,r); int sum = 0; if(s <= mid) sum += getsum(s,t,l,mid,lchild); if(t > mid) sum += getsum(s,t,mid + 1,r,rchild); return sum; } int n,m; int op,x,y,k; signed main() { scanf("%lld%lld", &n, &m); for(int i = 1; i <= n; i++) scanf("%lld", &a[i]); build(1,n,1); for(int i = 1; i <= m; i++) { scanf("%lld%lld%lld", &op, &x, &y); if(op == 1) { scanf("%lld" ,&k); add_update(x,y,1,n,ROOT,k); } else printf("%lld\n", getsum(x,y,1,n,ROOT)); } } ```
by CISC_qwq @ 2023-08-04 16:22:42


update写错了,应该和query一样,包含在被修改的区间里才能修改
by Zzzcr @ 2023-08-04 16:23:11


@[Chtholly_is_so_cute](/user/564694) ok,我先看看
by __LePetitPrince__ @ 2023-08-04 16:24:10


@[Zzzcr](/user/761491) 可是我有不在区间里的忽略掉啊 ``` if (r < pl || l > pr) { return; } ```
by __LePetitPrince__ @ 2023-08-04 16:27:11


我感觉烦的应该是什么低级错误(但我就是没看出来((
by __LePetitPrince__ @ 2023-08-04 16:28:12


@[_LePetitPrince_](/user/255169) 第85行 ```cpp scanf("%d%d%d", &x, &y); ```
by 初星逝者 @ 2023-08-04 16:41:15


| 下一页