题目链接

https://www.luogu.org/problemnew/show/P3374

树状数组

树状数组最基本的就是求区间和。

维护:

  • 空间复杂度:O(n)
  • 时间复杂度(区间和,单点修改):

    修改:O(logn)

    查询:O(logn)

用c[i]表示(i-lowbit[i]+1,i)区间的和。

查询时,用到前缀和的思想,(i,j)=c[j]-c[i-1]。

优点

代码简单

缺点

难理解

代码(解析)

 #include<iostream>
#include<cstdio>
using namespace std;
const int maxn=;
int n,m;
int c[maxn];
int lowbit(int x){//求对应数字的二进制的从后往前的第一个1。
return x&(-x);//例如:6(110)->lowbit(6)=2;12(1100)->lowbit(12)=4
}
void update(int x,int v){//初始化和更新
for(int i=x;i<=n;i+=lowbit(i)){//自己手画一下
c[i]+=v;
}
}
int query(int x){ //查询:和更新很像,像是互逆的
int res=;
for(int i=x;i>;i-=lowbit(i)) res+=c[i];
return res;
}
int main()
{
cin>>n>>m;
for(int i=;i<=n;i++){
int v;
scanf("%d",&v);
update(i,v);
}
for(int i=;i<=m;i++){
int k,x,y;
scanf("%d%d%d",&k,&x,&y);
if(k==) update(x,y);
if(k==) cout<<query(y)-query(x-)<<endl;
}
return ;
}

最新文章

  1. 【纯css】左图右文列表,左图外框宽度占一定百分比的正方形,右上下固定,右中自动响应高度。支持不规则图片。
  2. Day3-python基础3
  3. 机器学习常用Python扩展包
  4. Intellij IDEA tomcat相关
  5. Java简单数据类型转换
  6. Alarm(硬件时钟) init
  7. C#核编之字符串类型介绍与操作
  8. BootStrap - FileUpload美化样式
  9. crm采用soap删除记录
  10. springMVC项目异步错误处理请求Async support must be enabled on a servlet and for all filters involved in async
  11. Python的加入!
  12. 用grant命令为用户赋权限以后,登录时,出现:ERROR 1045 (28000)
  13. Mybatis中常用的SQL
  14. Android自定义view进阶-- 神奇的贝塞尔曲线
  15. 巧用FineReport搭建成本管控监测系统
  16. 在html页面通过js实现复制粘贴功能
  17. 洛谷P1541 乌龟棋(四维DP)
  18. 如何在Android的ListView中构建CheckBox和RadioButton列表(支持单选和多选的投票项目示例)
  19. beego 初体验 - orm
  20. 让java从Mysql返回多个ResultSet

热门文章

  1. 行人重识别(ReID) ——数据集描述 Market-1501
  2. 第四讲 自定义Realm来实现身份认证
  3. select 项目&lt;选课系统&gt;
  4. JVM垃圾回收算法图解
  5. 12.解决SUSE Linux无法使用SSH登录的问题
  6. SSM中前台传数组。后台接受的问题
  7. 前端每日实战:21# 视频演示如何用纯 CSS 创作文本滑动特效的 UI 界面
  8. Python---编辑器安装和print函数
  9. Julia 语言
  10. web框架之初识Django