当前位置: 首页 > news >正文

Y1——树状数组入门

知识点

树状数组

树状数组多解决

   计算数列的前缀和与区间和 的问题

时间复杂度

O(logn)

相对于暴力枚举的O(n)级别快了不少 

空间复杂度

O(n)

树状数组构成

树形结构表示数组,叶子结点存值

同时进行优化

优化:

用c[]表示子树叶子结点的权值之

使其中一些节点既表示a[i] 又表示和

如何知道哪些节点特殊??

1.将下标转为二进制

2.仔细观察

3.发现与二进制末尾0的个数有关

4.召唤神龙!!!(*@#*&#%^)

5.从下标i开始往前加2^k个数字,k就是0的个数

6.使用神奇的    lowbit(i)     运行完返回2^k

lowbit(i)

int lowbit(int t){

        return t&(-t);

}

-t代表t的负数(计算机中使用对应的正数的补码表示)

单点修改

只修改与其相关的

咋找??

恭喜又问到了点上

i 每次增加 lowbit ( i ) 

代码
void update(int x,int y){//x为更新的位置,y为a[x]的变化量,n为数组最大值 for(int i=x;i<=n;i+=lowbit(i)){c[i]+=y;}
}

 区间查询

代码

注意当数据较大时,int函数变一下long long

int getsum(int x){int ans=0;for(int i=x;i;i-=lowbit(i)){ans+=c[i];}return ans;
}

BIT-1

题目描述

给定数组�1,�2...��a​1​​,a​2​​...a​n​​,进行q次操作,操作有两种:

1 i x:将��a​i​​加上 x;

2 l r:求��+...+��a​l​​+...+a​r​​

输入描述

第一行:输入两个数 n,q,表示给定数组的长度和操作数

第二行:输入n个数,表示长度为n的给定数组

接下来q行:每行输入3个数字,表示如题的某一种操作

输出描述

对于每个2操作,输出对应结果

输入样例

 
  1. 3 2
  2. 1 2 3
  3. 1 2 1
  4. 2 1 3

输出样例

 
  1. 7

数据描述

1≤�,�≤1061≤n,q≤10​6​​

∣��∣≤106∣a​i​​∣≤10​6​​

对于输入:保证1≤�≤�≤�,∣�∣≤1061≤l≤r≤n,∣x∣≤10​6​​

代码

#include<bits/stdc++.h>
using namespace std;
long long c[1000005];
int n,q,a[1000005],x,y,r;
int lowbit(int t){return t&(-t);
}
void update(int x,int y){//x为更新的位置,y为a[x]的变化量,n为数组最大值 for(int i=x;i<=n;i+=lowbit(i)){c[i]+=y;}
}
//long long
long long getsum(int x){long long ans=0;for(int i=x;i;i-=lowbit(i)){ans+=c[i];}return ans;
}
int main(){scanf("%d%d",&n,&q);for(int i=1;i<=n;i++){scanf("%d",&a[i]);update(i,a[i]);} for(int i=1;i<=q;i++){scanf("%d%d%d",&r,&x,&y);if(r==1){update(x,y);}else{printf("%lld\n",getsum(y)-getsum(x-1));}}return 0;
}

相关文章:

  • 每天一道面试题@第五天
  • 推理能力:五一模型大放送
  • C# 运算符重载深度解析:从基础到高阶实践
  • 第3章 Python 3 基础语法001
  • 大模型:解码人工智能的算力革命与边界突破
  • Go反射-通过反射调用结构体的方法(带入参)
  • Spring 容器相关的核心注解​
  • xLua笔记
  • 【2025年】MySQL面试题总结
  • 【Java学习】关于springBoot的自动配置和起步依赖
  • 【深度学习-Day 4】掌握深度学习的“概率”视角:基础概念与应用解析
  • re题(53)BUUCTF-[ACTF新生赛2020]SoulLike
  • fastapi+vue中的用户权限管理设计
  • 从零开始理解 C++ 后端编程中的分布式系统
  • word怎么删除空白页?word最后一页删不掉怎么办
  • 网络通信领域的基础或流行协议
  • 重载和覆写有什么区别?
  • 开源项目实战学习之YOLO11:ultralytics-cfg-models-nas(十)
  • AVInputFormat 再分析
  • 1penl配置
  • 人民日报和音:引领新时代中俄关系坚毅前行
  • 人民日报今日谈:为何重视这个“一体化”
  • AI把野史当信史?警惕公共认知的滑坡
  • 案件发回重审,李在明参选韩总统之路再添波折
  • “五一”假期首日国铁郑州局迎大客流,预计发送旅客逾95万人次
  • 建设银行南昌分行引金融“活水”,精准灌溉乡村沃土