标签:树状 int res sum tr 1264 add 区间 Acwing
树状数组的基本操作:修改某个数(维护区间),求区间和
①修改(给第x个数加c)
void add(int x,int c)
{
w[x]+=c;
for(int i=x;i<=n;i+=lowbit(i))
tr[i]+=c;
}
②求区间和 (1~x的区间和)
若求[a,b]区间和,则为sum(b)-sum(a-1)
int sum(int x)
{
int res=0;
for(int i=x;i>=1;i-=lowbit(i))
res+=tr[i];
return res;
}
整体代码:(注意使用add(i,w[i])初始化树状数组)
#include<iostream>
using namespace std;
const int N=1e5+5;
int w[N];
int tr[N];
int n,m;
int lowbit(int x)
{
return x&-x;
}
int sum(int x)
{
int res=0;
for(int i=x;i>=1;i-=lowbit(i))
res+=tr[i];
return res;
}
void add(int x,int c)
{
w[x]+=c;
for(int i=x;i<=n;i+=lowbit(i))
tr[i]+=c;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>w[i],add(i,w[i]);
while(m--)
{
int k,a,b;cin>>k>>a>>b;
if(!k) cout<<sum(b)-sum(a-1)<<endl;
else add(a,b);
}
}
标签:树状,int,res,sum,tr,1264,add,区间,Acwing 来源: https://blog.csdn.net/weixin_50533561/article/details/122782504
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。