0)

树状数组与线段树都适用于在一个连续数列中任意指定两个数求这两个数之间所有数之和的情景。

而传统数组(共n个元素)的元素修改和连续元素求和的复杂度分别为O(1)和O(n),树状数组主要利用二分的思想构造伪树的结构,使修改和求和的时间复杂度

均为O(logn),(线性结构只能逐个扫描元素,而树状结构可以实现跳跃式扫描)提高了效率。

相对于容易理解但所占内存空间偏大的线段树而言(线段树的节点数,一般是题目中点的个数的3或4倍),树状数组所占内存空间较小(该结构中节点数一般比题目中点的个数稍大一点即可)。

本质  树状数组,对于其中某些节点(不是全部)的值,是其下辖的另一些节点之和,所以对于任意区间区间求和时,不用将该区间内所有点都加一遍,只要加几个节点值即可。

自己的理解还不深刻,只是到了能用的地步,网上的一些博客已经归纳的不错了,便不再赘述。

参考博客:董的博客(有一些小错误)点击打开链接;用二进制的角度来看易于加深理解点击打开链接 等等。

1)

#include <iostream>
#include <stdio.h>
#include <string.h>using namespace std;
const int maxn=200010;
int star[maxn];//就是每一个potmeters结点
int a[maxn];
//int level[maxn];
int Init(int x){return x&(-x);//2^k,k是x以二进制形式时末尾0的个数;2^k==x&(x^(x-1))==<span style="text-indent: 25.2px; font-family: Arial, Helvetica, sans-serif;">x&(-x)</span>
}
int Sum(int x){int res=0;while(x>0){res+=star[x];x-=Init(x);}return res;
}
void Add(int i,int pos,int value){while(pos<=maxn){star[pos]=star[pos]-a[i]+value;pos+=Init(pos);}return ;
}
int main()
{int n;int kase=0;while(~scanf("%d",&n)){if(n==0){break;}if(kase!=0){cout<<endl;}kase++;memset(star,0,sizeof(star));memset(a,0,sizeof(a));//memset(level,0,sizeof(level));for(int i=1;i<=n;i++){int temp;scanf("%d",&temp);Add(i,i,temp);a[i]=temp;}string com;printf("Case %d:\n",kase);while(cin>>com&&com!="END"){int x;int y;scanf("%d%d",&x,&y);//增加Add和求和Sum完全是不同的两条路径if(com=="M"){cout<<Sum(y)-Sum(x-1)<<endl;}else if(com=="S"){Add(x,x,y);a[x]=y;}}}return 0;
}

2)

UVA12086

UVA12086 树状数组 + 裸 +单点重置相关推荐

  1. hdu1166敌兵布阵 树状数组裸题

    树状数组裸题 动态更新区间内的点,动态查询区间和 敌兵布阵 ac代码 #include<iostream> #include<algorithm> #include<cs ...

  2. 树状数组(单点修改,区间修改等)

    前言:上次练习树状数组的专题还是半年前,练了练就过了,后来学了线段树,觉得树状数组这啥啊,线段树不香吗,就再也没管过树状数组了.直到几天前被树状数组血虐了,急忙爬回来补树状数组.(事实证明学的越少,越 ...

  3. 树状数组(单点+区间的所有操作)

    转载:https://blog.csdn.net/I_believe_CWJ/article/details/80374326 更简洁方便的数据结构--树状数组(基于线段树的实现) 1.单点更新+区间 ...

  4. 数据结构一【树状数组】普通、二维、离线树状数组的(单点修改,单点查询,区间修改,区间查询)模板及应用例题总结

    文章目录 树状数组 lowbit 线段树与树状数组 单点修改 区间查询 区间修改 区间求和 二维树状数组 离线树状数组 例题 POJ:stars MooFest [SDOI2009]HH的项链 Tur ...

  5. Billboard HDU - 2795(树状数组,单点修改,区间查询)

    题目链接:https://vjudge.net/problem/HDU-2795 思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了. ...

  6. P3374 【模板】树状数组 1( 单点修改 + 区间查询 )

    题目链接:点击进入 题目 思路深入学习 树状数组实现-> 单点修改 + 区间查询 c [ i ] = a ( i - 2 ^ k + 1 ) + - + a [ i ] ( 设节点编号为 i , ...

  7. 简单の暑假总结——树状数组

    2.1 树状数组 树状数组,顾名思义,长得像树的数组,用于处理一些单点修改以及区间查询的问题.其时间复杂度为 O(log⁡2n)O(\log _2n)O(log2​n) .如过我们使用一些一般的数据结 ...

  8. 【模板】树状数组 2

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数数加上x 2.求出某一个数的值 输入输出格式 输入格式: 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. ...

  9. 【bzoj2434】[Noi2011]阿狸的打字机 AC自动机+Dfs序+树状数组

    题目描述 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小 ...

最新文章

  1. Java 多线程编程(锁优化)
  2. 微生物组领域最高质量的资源全在这
  3. Spark环境搭建(一)-----------HDFS分布式文件系统搭建
  4. 以后看下try,catch在C#下面的成本
  5. Maven最佳实践:版本管理
  6. buu [BJDCTF 2nd]老文盲了
  7. python变量存储 堆与栈内存内存_浅析JS中的堆内存与栈内存
  8. android 高清壁纸设置慢
  9. matlab cdf,Matlab 简单计算PDF和CDF | 学步园
  10. x-lite for linux,Linux Lite 4.6正式发布:现基于Ubuntu 18.04.3 LTS
  11. java 系统自动检测_如何在Java中检测OS(操作系统)名称?
  12. 白盒测试及其存在的一些问题
  13. 一步一步学Linq to sql(十):分层构架的例子
  14. [导入]c# GDI+简单绘图(一)
  15. 计算机组成原理试题和答案2017,【2017年整理】计算机组成原理试题及答案9.doc...
  16. nginx不转发static下文件_文件存储老大难,随取随用不心烦!玩转最强私人云盘群晖NAS(下)...
  17. VVC/VTM:代码学习——CIIP详细过程
  18. 小说光看还不够?当然得有美女一样的声音来阅读!
  19. 16-kubernetes集群中ceph集群使用
  20. 优信拍集团php面试题_【优信拍PHP高级工程师面试】问一些底层的问题和准则-看准网...

热门文章

  1. Java基础~Java DateTimeFormatter类
  2. 夜神模拟器安卓7.1(64位)安装xposed
  3. 达观杯”文本智能处理挑战赛
  4. Java学习之Path路径
  5. mysql容器化后的缺点_沙场秋点兵——MySQL容器化性能测试对比
  6. 正向(逆向)最大匹配和最大概率法分词的错误分析
  7. 基于单片机水质检测仪系统仿真设计-毕设资料
  8. 高德地图与百度地图坐标相互转化
  9. 2022-2027年中国核辐射检测仪市场竞争态势及行业投资前景预测报告
  10. mysql varchar 主键_MySQL – 如何使用VARCHAR作为AUTO INCREMENT主键