线段树新手求助,这题怎么初始建树

P3374 【模板】树状数组 1

build(n,0,n) ~~然而他让你用树状数组~~
by konjacq @ 2019-01-11 20:35:14


@[洛狗](/space/show?uid=54189) 线段树也可以的鸭 调用一次就行了吗? 还有为什么左边界是1? 求教谢谢
by Meatherm @ 2019-01-11 20:41:18


我觉得应该`build(1,1,n)`
by ButterflyDew @ 2019-01-11 20:44:16


@[兹磁洛谷](/space/show?uid=108949) 一、这是一个用来初始化线段树的函数 二、既然是初始化那当然一般来讲只用调一次 三、这种写法调的时候应该是``build(1,1,N)`` 四、左边界和写法有关,不理解可以自己模拟递归过程
by x义x @ 2019-01-11 20:45:58


然而这是一道树状数组题…… 贴代码: ```cpp #include<cstdio> using namespace std; int n=0,m=0; int t[500001]={}; inline int lowbit(int n) { return n&(-n); } void add(int pos,int x) { while(pos<=n) { t[pos]+=x; pos+=lowbit(pos); } } int sum(int pos) { int ans=0; while(pos) { ans+=t[pos]; pos-=lowbit(pos); } return ans; } int main() { scanf("%d%d",&n,&m); for(int i=1,x=0;i<=n;i++) { scanf("%d",&x); add(i,x); } int opt=0,x=0,y=0; while(m--) { scanf("%d%d%d",&opt,&x,&y); if(opt==1) { add(x,y); } else { printf("%d\n",sum(y)-sum(x-1)); } } return 0; } ```
by 周子衡 @ 2019-01-11 20:57:49


树状数组比较方便
by 周子衡 @ 2019-01-11 20:58:19


@[周子衡](/space/show?uid=112794) @[x义x](/space/show?uid=58567) 谢谢!现在明白了
by Meatherm @ 2019-01-11 21:01:20


我看错了 确实是1,1,n
by konjacq @ 2019-01-12 08:06:13


|