博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构:树状数组
阅读量:5042 次
发布时间:2019-06-12

本文共 1157 字,大约阅读时间需要 3 分钟。

树状数组可以修改点查询区间和,其修改和查询都是平衡树级别的

其实它本身就是一颗差不多的树

具体原理这里不再叙述,因为已经忘了。。

下面直接给出相应的函数:

修改点:

void update(int x,int y){    while(x<=n)    {        c[x]+=y;        x+=lowbit(x);    }}

查询区间和:

int sum(int x){    int ans=0;    while(x>0)    {        ans+=c[x];        x-=lowbit(x);    }    return ans;}

在使用树状数组的时候,一定要注意题目给出的数据范围,千万不要忘记开long long

下面给出完整实现,这篇博文确实太水了。。

1 //aininot260 修改点,查询区间和 2 #include
3 using namespace std; 4 const int maxn=100005; 5 const int maxm=10005; 6 int n,m; 7 int a[maxn]; 8 int c[maxn]; 9 int lowbit(int x)10 {11 return x&(-x);12 }13 void update(int x,int y)14 {15 while(x<=n)16 {17 c[x]+=y;18 x+=lowbit(x);19 }20 }21 int sum(int x)22 {23 int ans=0;24 while(x>0)25 {26 ans+=c[x];27 x-=lowbit(x);28 }29 return ans;30 }31 int main()32 {33 cin>>n;34 for(int i=1;i<=n;i++) cin>>a[i];35 for(int i=1;i<=n;i++) update(i,a[i]);36 cin>>m;37 for(int i=1;i<=m;i++)38 {39 int x,y,z;40 cin>>x>>y>>z;41 if(x==1) update(y,z);42 if(x==2) cout<
<

 

转载于:https://www.cnblogs.com/aininot260/p/9304826.html

你可能感兴趣的文章
Oracle数据库的增、删、改、查
查看>>
MySql执行分析
查看>>
git使用中的问题
查看>>
yaml文件 .yml
查看>>
linux字符集修改
查看>>
phpcms 添加自定义表单 留言
查看>>
mysql 优化
查看>>
读书笔记 ~ Nmap渗透测试指南
查看>>
WCF 配置文件
查看>>
动态调用WCF服务
查看>>
oracle导出/导入 expdp/impdp
查看>>
类指针
查看>>
css修改滚动条样式
查看>>
2018.11.15 Nginx服务器的使用
查看>>
Kinect人机交互开发实践
查看>>
百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET...
查看>>
JAVA 技术类分享(二)
查看>>
android客户端向服务器发送请求中文乱码的问
查看>>
Symfony翻译教程已开课
查看>>
TensorFlow2.0矩阵与向量的加减乘
查看>>