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