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