【算法】树状数组

文章目录

  • 一、基本概念
  • 二、核心操作
  • 三、常见应用

一、基本概念

树状数组用于动态维护一段区间,操作的时间复杂度为 O ( l o g n ) O(logn) O(logn)

定义: t [ i ] = [ i − l o w b i t ( i ) + 1 , i ] t[i] = [i - lowbit(i) + 1, i] t[i]=[ilowbit(i)+1,i] 区间和

二、核心操作

树状数组下标建议从 1 1 1 开始

单点修改:给 a [ x ] + v a[x] + v a[x]+v

void add(int x, int v)
{for(int i = x; i <= n; i += lowbit(i)) t[i] += v;
}

区间查询:求 [ 1 , x ] [1, x] [1,x] 区间和

int query(int x)
{int res = 0;for(int i = x; i; i -= lowbit(i)) res += t[i];return res;
}

lowbit

int lowbit(int x)
{return x & -x;
}

三、常见应用

树状数组维护差分,可以实现动态的区间修改和单点查询

区间修改:给 [ l , r ] [l, r] [l,r] 区间每个数加上 c c c

add(l, c);
add(r + 1, -c);

单点查询:求 a [ x ] a[x] a[x]

query(x)

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

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

相关文章

harmony 鸿蒙系统学习 安装ohpm报错 ohpm install failed

一. 安装配置 DevEco Studio 安装包时报错 execute ohpm install failed. Install task failed: ArkTS 3.2.12.5. Install ArkTS dependencies failed. 解决办法 找原因&#xff0c;首先&#xff0c;我的电脑中之前安装过node&#xff0c;也许是因为这个。&#xff08;其实…

Git 使用教程

一、Git的认识 1.1版本控制 什么是“版本控制”&#xff1f;我为什么要关心它呢&#xff1f; 版本控制是一种记录一个或若干文件内容变化&#xff0c;以便将来查阅特定版本修订情况的系统。 a) 还原&#xff1a;如果你是程序开发者&#xff0c;在新写一个促销活动的java文…

Linux常见基本指令

本文将详细的介绍Linux中各常见指令的用法&#xff0c;并且在每个指令都有使用样例。一共有以下指令&#xff1a; 1. man指令 2.目录基础指令&#xff1a;2.1 pwd指令、2.2 ls指令、2.3 cd指令 3.文件创建与删除&#xff1a;3.1 touch指令、3.2 mkdir指令、3.3 rmdir 指令 &…

Rabbitmq入门与应用(二)-RabbitMQ工作模型

RabbitMQ工作模型 RabbitMQ Tutorials — RabbitMQ Broker RabbitMQ服务。 Connection 生产者或是服务者都需要与Broker建立的TCP连接。 Channel 保持的TCP长连接里面去创建和释放Channel&#xff0c;从而减少资源的消耗。其中Channel是相互隔离的&#xff0c;不能共享。 Queu…

PHP如何利用post与get方式传值接收数据

目录 一、POST传值1. 使用curl库发送 POST 请求&#xff1a;2. 使用file_get_contents()函数发送 POST 请求&#xff1a;3. 使用stream_socket_client()函数发送 POST 请求&#xff1a;4. 利用from表单提交数据&#xff1a; 二、GET传值1. 使用http_build_query()函数构建 URL …

Java IO:同步阻塞和装饰器模式详解

前言 大家好&#xff0c;我是chowley&#xff0c;今天来介绍一下Java IO中的两个重要概念——同步阻塞和装饰器模式。 同步阻塞 在计算机编程中&#xff0c;同步阻塞&#xff08;Synchronous Blocking&#xff09;指的是在进行某个操作时&#xff0c;当前线程会被阻塞&#…

代码随想录算法训练营|day36

第八章 贪心算法 435.无重叠区间763.划分字母区间56.合并区间代码随想录文章详解总结 435.无重叠区间 对右边界升序排序&#xff0c;类似用最少数箭射爆气球&#xff0c;遍历区间&#xff0c;若当前区间与前一个区间不重合&#xff0c;更新区间边界end为当前区间右边界&#x…

【ansible】自动化运维ansible之playbook剧本编写与运行

目录 一、ansible剧本playbook的组成 二、palybook的基础应用: 实操1&#xff1a;通过palybooks完成nginx的安装 第一种&#xff1a;通过yum安装nginx 第二种&#xff1a;通过编译安装nginx 实操2&#xff1a;playbook定义、引用变量​​​​​​​ 实操3&#xff1a;通过…

有哪几种行为会导致服务器被入侵

导致服务器被入侵的行为有很多种&#xff0c;以下是一些常见的行为&#xff1a; 系统漏洞&#xff1a;服务器操作系统或软件存在漏洞&#xff0c;攻击者可以通过利用这些漏洞获取系统权限&#xff0c;从而入侵服务器。 弱口令&#xff1a;服务器的账号密码过于简单或者未及时更…

C#泛型及其应用:获取并显示员工信信息

目录 一、关于泛型 1.泛型定义 2.泛型与非泛型的区别 3.泛型的应用 &#xff08;1&#xff09;泛型类&#xff1a; &#xff08;2&#xff09;泛型方法&#xff1a; &#xff08;3&#xff09;泛型委托&#xff1a; &#xff08;4&#xff09;泛型接口&#xff1a; &a…

通过conda安装cudatoolikit和cudnn

通过conda安装cudatoolikit和cudnn 安装cudatoolkit安装cudnn安装cudatoolkit-dev 安装cudatoolkit conda install cudatoolkit11.3 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ 安装cudnn conda install cudnn8.5 -c https://mirrors.tuna.tsinghua.edu.…

ECMAScript 6+ 新特性 ( 二 )

2.12. class类 ES6 提供了更接近传统语言的写法&#xff0c;引入了 Class&#xff08;类&#xff09;这个概念&#xff0c;作为对象的模板。通过 class 关键字&#xff0c;可以定义类。 ES6 的 class 可以看作只是一个语法糖&#xff0c;它的绝大部分功能ES5 都可以做到&…

五种多目标优化算法(MOGWO、MOJS、NSWOA、MOPSO、MOAHA)性能对比(提供MATLAB代码)

一、5种多目标优化算法简介 1.1MOGWO 1.2MOJS 1.3NSWOA 1.4MOPSO 1.5MOAHA 二、5种多目标优化算法性能对比 为了测试5种算法的性能将其求解9个多目标测试函数&#xff08;zdt1、zdt2 、zdt3、 zdt4、 zdt6 、Schaffer、 Kursawe 、Viennet2、 Viennet3&#xff09;&#xff0…

安装python开发包管理环境miniconda

Python 管理 —— Conda Python 环境管理的价值在于将同一个 Python 版本的不同需求分开&#xff0c;比如&#xff1a;项目 A 和 项目 B 都需要 Python 3.10.11 这个版本&#xff0c;都用到了 requests 包&#xff0c;但是项目 A 需要 requests 2.1&#xff0c;而项目 B 需要 …

RPA岗位介绍 - RPA业务分析师

岗位描述 RPA业务分析师是连接IT部门与业务部门的关键角色,他们的主要职责是与团队合作梳理、识别、分析和理解业务流程,识别潜在的自动化机会,并将其转化为机器人流程自动化(RPA)的解决方案。 岗位职责 与业务部门合作,采集、梳理和分析业务需求,识别适用于自动化改造…

JDBC实现增删改查

此篇文章的基础来自https://blog.csdn.net/weixin_39038328/article/details/136197311?spm1001.2014.3001.5501 一、 数据查询 public static void search() {try {Class.forName("com.mysql.jdbc.Driver"); // 1.加载驱动//2.建立连接Connection connection (C…

day 21 (重点程序 )

先整理程序 文件拷贝 1.fgetc/fputc 1 #include<stdio.h>2 int main(void)3 {4 FILE *fsrc NULL;5 FILE *fdst NULL;6 char ch 0;7 fsrc fopen("src.txt","r");8 if(NULL fsrc)9 {10 perror("fail to f…

leetcode1049:最后一块石头的重量二

解题思路&#xff1a; 把石头堆分割成差不多的两堆&#xff0c;使得两堆差值最小 dp数组的含义&#xff1a; dp[j]:背包容量为j的背包最大重量(价值)为dp[j] dp[j] max(dp[j],dp[j-stones[i]] stones[i]) 初始化&#xff1a;&#xff08;dp数组的大小根据题目进行定义&a…

vue2中vuex的各项的各种调用方式,部分对比vue3的pinia

首先vuex的实例化比较特别&#xff0c;通过 导入Vue和Vuex&#xff0c;先Vue.use(Vuex)再 new Vuex.store()的方式来实例化仓库&#xff0c; 模块则是通过创建modules文件夹&#xff0c;在新建的文件中export符合规范的对象&#xff0c;这样约定俗成的方式来创建&#xff0c…

网络安全--网鼎杯2018漏洞复现(二次注入)

一、环境&#xff1a;在线测试平台 BUUCTF在线评测 (buuoj.cn) 二、进入界面先尝试万能账号 1or11# 换格式 hais1bux1 11or11# 三、万能的不行那我们就得想注册了&#xff0c;去register.php去看看 注册个账号 发现用户名回显&#xff0c;猜测考点为用户名处二次注入&…