树状数组——点修区查与区修点查

树状数组是一种代码量小,维护区间的数据结构

他可以实现:

1.区间修改,单点查询

2.单点修改,区间查询

当然,二者不可兼得,大人全都要的话,请选择线段树

前置知识:

lowbit(x)操作:

获取x二进制的最后一位1以及其后面的0所组成的数

比如x等于6时,其二进制为110,那么lowbit(6)就等于2,其二进制为10

这里有:

lowbit(x)=x&(-x)

树状数组的特性:

对于树状数组tr[N]而言

tr[x+lowbit(x)]是tr[x]的父亲

对于区间[1,x]而言

其区间和等于tr[x]+\sum tr[x-lowbit(x))] (x>0)



操作:

设原数组为a[N],大小为n,树状数组为tr[N],

1.单点修改,区间查询:

假设我们要对a[x]的权值进行修改,那么我们对tr[x]进行修改,然后不断pushup他的父结点,也就是tr[x+lowbit(x)]就可以了,直到pushup到tr[n]

如果我们要对区间[l,r]进行查询,我们只要求出区间[1,l-1],[1,r],然后利用前缀和就可以求出区间[l,r]的和了

实现代码如下:

int lowbit(int x){return x & (-x);
}//单点修改
void pointAdd(int x,int k){for (int i = x; i <= n;i+=lowbit(i)){tr[i] += k;}
}//查询区间[l,r]
int queryLine(int l,int r){int sum = 0;for (int i = r; i;i-=lowbit(i)){sum += tr[i];}for (int i = l - 1; i;i-=lowbit(i)){sum -= tr[i];}return sum;
}

2.区间修改,单点查询

其实本质上还是利用树状数组单点修改的方便性

这里我们构造原数组的差分数组d,然后用树状数组来维护数组d

当我们需要对原数组的区间[l,r]进行加权值k的修改时,只需要对差分数组d[l]和d[r+1]进行单点修改就可以了

当我们需要对原数组的a[x]进行查询时,只要求出d数组[1,x]的区间和就可以了

实现代码如下:

//初始化差分数组以及树状数组
void init(){for (int i = 1; i <= n;i++){d[i] = a[i] - a[i - 1];for (int j = i; j <= n;j+=lowbit(j)){tr[j] += d[i];}}
}//区间修改
void change(int l,int r,int k){for (int i = r + 1; i<=n;i+=lowbit(i)){tr[i] -= k;}for (int i = l;i<=n;i+=lowbit(i)){tr[i] += k;}
}//单点查询
int query(int x){int sum = 0;for (int i = x; i;i-=lowbit(i)){sum += tr[i];}return sum;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/37372.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何安装和配置Monit

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 关于 Monit Monit 是一个有用的程序&#xff0c;可以自动监控和管理服务器程序&#xff0c;以确保它们不仅保持在线&#xff0c;而且文…

Java与前端框架集成开发指南

Java与前端框架集成开发指南 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 在当今互联网应用开发中&#xff0c;Java作为一种强大的后端语言&#xff0…

程序人生 - (002)

作为一名程序员&#xff0c;在编程和软件开发的过程中&#xff0c;通常会有一些深刻的感悟和体会。这些感悟不仅仅是关于技术的&#xff0c;也包括对工作的态度、职业的发展和人生的理解。 代码即逻辑&#xff1a;编写代码不仅仅是使用编程语言&#xff0c;更重要的是用逻辑思维…

LDM论文解读

论文名称&#xff1a;High-Resolution Image Synthesis with Latent Diffusion Models 发表时间&#xff1a;CVPR2022 作者及组织&#xff1a;Robin Rombach, Andreas Blattmann, Dominik Lorenz,Patrick Esser和 Bjorn Ommer, 来自Ludwig Maximilian University of Munich &a…

独一无二的设计模式——单例模式(Java实现)

1. 引言 亲爱的读者们&#xff0c;欢迎来到我们的设计模式专题&#xff0c;今天的讲解的设计模式&#xff0c;还是单例模式哦&#xff01;上次讲解的单例模式是基于Python实现&#xff08;独一无二的设计模式——单例模式&#xff08;python实现&#xff09;&#xff09;的&am…

web全屏api,实现元素放大全屏,requestFullscreen,exitFullscreen

全屏api 主要方法 document.exitFullscreen(); 退出页面全屏状态&#xff0c;document是全局文档对象 dom.requestFullscreen(); 使dom进入全屏状态&#xff0c;异步&#xff0c;dom是一个dom元素 dom.onfullscreenchange&#xff08;&#xff09;; 全…

专题四:Spring源码初始化环境与BeanFactory

上文我们通过new ClassPathXmlApplicationContext("applicationContext.xml");这段代码看了下Spring是如何将Xml里面内容注入到Java对象中&#xff0c;并通过context.getBean("jmUser");方式获得了一个对象实例&#xff0c;而避开使用new 来耦合。今天我们…

【TB作品】智能台灯控制器,ATMEGA128单片机,Proteus仿真

题目 8 &#xff1a;智能台灯控制器 基于单片机设计智能台灯控制器&#xff0c;要求可以调节 LED 灯的亮度&#xff0c;实现定时开启与关闭&#xff0c; 根据光照自动开启与关闭功能。 具体要求如下&#xff1a; &#xff08;1&#xff09;通过 PWM 功能调节 LED 灯亮度&#x…

【本地调试】使用 Nginx 和 Hosts 文件实现本地开发调试请求转发

可以按照以下 nginx 配置来设置&#xff0c;通过 nginx 和 host 将网页的请求转发到本地的后端服务器&#xff0c;以方便本地开发调试 一、nginx 配置 worker_processes 1;events {worker_connections 1024; }http {include mime.types;default_type application/js…

【Python】 数据分析中的常见统计量:中位数

那年夏天我和你躲在 这一大片宁静的海 直到后来我们都还在 对这个世界充满期待 今年冬天你已经不在 我的心空出了一块 很高兴遇见你 让我终究明白 回忆比真实精彩 &#x1f3b5; 王心凌《那年夏天宁静的海》 中位数&#xff08;Median&#xff09;是统计学…

深入浅出3D感知中的优化与基于学习的技术1(原创系列)

近期几乎看了所有有关NERF技术论文&#xff0c;本身我研究的领域不在深度学习技术方向&#xff0c;是传统的机器人控制和感知。所以总结了下这部分基于学习的感知技术&#xff0c;会写一个新的系列教程讲解这部分三维感知技术的发展到最新的技术细节&#xff0c;并支持自己最近…

娱乐圈发生震动,AI大模型技术已经取代了SNH48的小偶像?

自2023年以来&#xff0c;全球都被包裹在AI的惊天大潮之中&#xff0c;所有行业都在主动或被动地迎接改变。目前&#xff0c;各行业已经有大量公司正在把AI作为自身发展的最佳路径。其中&#xff0c;娱乐行业作为最被人们熟知的行业也在面对AI的发展时&#xff0c;发生着巨大变…

解析Java中1000个常用类:Currency类,你学会了吗?

在线工具站 推荐一个程序员在线工具站:程序员常用工具(http://cxytools.com),有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具,效率加倍嘎嘎好用。程序员资料站 推荐一个程序员编程资料站:程序员的成长之路(http://cxyroad.com),收录了一些列的技术教程…

解析connectionReset异常的原因与解决方案

解析connectionReset异常的原因与解决方案 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨Java中connectionReset异常的原因及其解决方案。这…

遥远星辰中的觉醒:超大质量黑洞的苏醒与人类的未来

遥远星辰中的觉醒&#xff1a;超大质量黑洞的苏醒与人类的未来 在浩渺无垠的宇宙中&#xff0c;星辰的闪烁仿佛是时间的涟漪&#xff0c;穿越亿万年的距离&#xff0c;抵达我们的眼眸。而在这片星辰大海的深处&#xff0c;一个惊人的现象正在悄然上演——距离地球3.6亿光年之遥…

Unity获取剪切板内容粘贴板图片文件文字

最近做了一个发送消息的unity项目&#xff0c;需要访问剪切板里面的图片文字文件等&#xff0c;翻遍了网上的东西&#xff0c;看了不是需要导入System.Windows.Forms&#xff08;关键导入了unity还不好用&#xff0c;只能用在纯c#项目中&#xff09;&#xff0c;所以我看了下py…

GMSB文章九:微生物的相关关系组间波动

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 计算配对微生物在组间的相关关系波动情况进而评估不同分组的微生物状态。secom_linear 函数…

线性表与顺序存储结构(下)

前言 接上文&#xff08;线性表与顺序存储结构&#xff08;上&#xff09;&#xff09;。 这些顺序存储结构的方法在顺序表上下卷中已经提到过&#xff0c;但是有些许不同&#xff0c;可以为理解顺序表提供更丰富的视角。&#xff08;不过最主要的区别在于顺序表上下卷中的顺…

机器人关节 viscous friction与结构阻尼

Viscous Friction&#xff08;粘性摩擦&#xff09; 定义&#xff1a;Viscous friction&#xff0c;也被称为粘性摩擦或粘滞摩擦&#xff0c;是机器人关节在运动过程中由于接触面之间的相互作用而产生的摩擦力。这种摩擦力与关节的运动速度有关&#xff0c;通常表现为速度越大&…

HarmonyOS开发实战:分布式文件系统-hmdfs

分布式文件系统提供跨设备的文件访问能力&#xff0c;适用于如下场景&#xff1a; 两台设备组网&#xff0c;A 设备可以无感读取和修改 B 设备的文件。 边缘服务器可以自动同步组网中多个嵌入式设备中的文件数据。 hmdfs 在分布式软总线动态组网的基础上&#xff0c;为网络上…