当前位置: 首页 > 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;
}

http://www.dtcms.com/a/170100.html

相关文章:

  • 每天一道面试题@第五天
  • 推理能力:五一模型大放送
  • 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配置
  • 【LeetCode Hot100】二分查找篇
  • 【Go类库分享】mcp-go Go搭建MCP服务
  • 将Airtable导入NocoDB
  • Python functools.partial 函数深度解析与实战应用
  • 【C/C++】Linux的futex锁
  • 音视频开发技术总结报告
  • 小土堆pytorch数据加载概念以及实战
  • StandardCopyOption 还有哪些其他可用的常量?
  • 为什么要做异地监控组网?
  • 洛谷P6136 【模板】普通平衡树(数据加强版)