数据结构-树状数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构-树状数组相关的知识,希望对你有一定的参考价值。
还是百度百科 http://baike.baidu.com/view/1420784.htm
一个简单的图理解一下
简单的说。。一个数组 c[] c[k]表示从 a[k-lowbit(k)+1]++++++c[k]所有的和,一般用于一段长度的连加
直接给代码啦
#include <iostream> #include <stdio.h> #define maxx 100010 int c[maxx],a[maxx]; int lowbit(int i){ return i&(-i); } int main() { int i,n,j,k,s; int sum; scanf("%d",&n);//n个数字 for(i=1;i<=n;i++){ scanf("%d",&a[i]); c[i]=0; k=lowbit(i); for(k=i-k+1;k<=i;k++) c[i]+=a[k]; } //查询1-k的数的和 scanf("%d",&k); sum=0; while(k){ sum+=c[k]; k=k-lowbit(k); } printf("%d",sum); //修改某一个数的值,已加为例子 scanf("%d%d",&k,&s); while(k<=n){ c[k]+=s; k=+lowbit(k); } }
以上是关于数据结构-树状数组的主要内容,如果未能解决你的问题,请参考以下文章