洛谷位置:P3374 【模板】树状数组 1
龙哥哥OJ位置:
#include<iostream>
using namespace std;
const int maxn=500005;
int n,m,a[maxn],c[maxn];
void change(int index,int v)
{
for(int i=index;i<=n;i+=i&(-i))
c[i]+=v;
}
int sum(int index)
{
int s=0;
for(int i=index;i>0;i-=i&(-i))
s+=c[i];
return s;
}//此处开始出错
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
change(i,a[i]);
}
int j,x,y,k;
for(int i=1;i<=m;i++)
{
cin>>j;
if(j==1)
{
cin>>x>>k;
change(x,k);
}
else
{
cin>>x>>y;
cout<<sum(y)-sum(x-1)<<endl;
}
}
return 0;
}
本文深入探讨了树状数组的基本原理与实现方法,通过一个具体的C++代码示例,详细解析了如何利用树状数组进行区间求和及更新操作。文章针对洛谷P3374模板题进行了代码讲解,适合初学者理解和掌握树状数组的应用。

5155

被折叠的 条评论
为什么被折叠?



