线段数--算法
线段树是常用来维护 区间信息 的数据结构
线段树可以在 O(logN) 的时间复杂度内实现
- 单点修改
- 区间修改
- 区间查询
-
- 区间求和
- 求区间最大值
- 求区间最小值
简单介绍一下线段树
线段树是一个将区间内的数不断细分的一种数据结构,也就是一个完全二叉树,用每一个叶子节点代表一个区间内的值
操作1:单点修改
单点修改是找到要修改的那个点所在的每一层的区间,最后通过叶子节点,修改为相应的值,然后向上递归
操作2:区间查询
区间查询[l,r]是指在线段树内从上向下查询,如果子区间的左右端点都在[l,r]内则不用在向下递归,直到找到所有的点
常用操作函数
- pushup(int u):用子节点的信息更新当前节点
-
- 参数u是根节点
static void pushUp(int u){node[u].sum=node[u<<1].sum+node[u<<1|1].sum;
}
- build(int u,int l,int r):在一段区间上初始化线段树
-
- 参数u是根节点,l是区间左端点,r是区间右端点
static void build(int u,int l,int r){if(l==r)node[u]=new Node(l,r,w[r]);else{node[u]=new Node(l,r,0);int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushUp(u);}
}
- modify(int u,int x,int v):修改某一点的值
-
- 参数u是根节点,x是要修改的节点,v是要增加或减小的值
static void modify(int u,int x,int v){if(node[u].l==node[u].r)node[u].sum+=v;else{int mid=(node[u].l+node[u].r)>>1;if(x<=mid)modify(u<<1,x,v);else modify(u<<1|1,x,v);pushUp(u);}
}
- query(int u,int l,int r):查询
-
- 参数u是根节点,l是区间左端点,r是区间右端点
static int query(int u,int l,int r){if(node[u].l>=l&&node[u].r<=r)return node[u].sum;int mid=node[u].l+node[u].r>>1;int sum=0;if(l<=mid)sum+=query(u<<1,l,r);if(r>mid)sum+=query(u<<1|1,l,r);return sum;
}
节点表示
父节点:x/2 ==> x>>1
左儿子:2x ==> x<<1
右儿子:2x+1 ==> x>>1|1
动态求连续区间和
package 线段树;import java.io.BufferedReader;
import java.io.InputStreamReader;public class Main {static int N=1000010;static Node[] node=new Node[N];static int[] w=new int[N];static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));static int n,m;static String[] $;static void pushUp(int u){node[u].sum=node[u<<1].sum+node[u<<1|1].sum;}static void build(int u,int l,int r){if(l==r)node[u]=new Node(l,r,w[r]);else{node[u]=new Node(l,r,0);int mid=l+r>>1;build(u<<1,l,mid);build(u<<1|1,mid+1,r);pushUp(u);}}static int query(int u,int l,int r){if(node[u].l>=l&&node[u].r<=r)return node[u].sum;int mid=node[u].l+node[u].r>>1;int sum=0;if(l<=mid)sum+=query(u<<1,l,r);if(r>mid)sum+=query(u<<1|1,l,r);return sum;}static void modify(int u,int x,int v){if(node[u].l==node[u].r)node[u].sum+=v;else{int mid=(node[u].l+node[u].r)>>1;if(x<=mid)modify(u<<1,x,v);else modify(u<<1|1,x,v);pushUp(u);}}public static void main(String[] args)throws Exception {$=br.readLine().split(" ");n=Integer.parseInt($[0]);m=Integer.parseInt($[1]);$=br.readLine().split(" ");for(int i=1;i<=n;i++)w[i]=Integer.parseInt($[i-1]);build(1,1,n);while (m-->0){$=br.readLine().split(" ");int k=Integer.parseInt($[0]);int a=Integer.parseInt($[1]);int b=Integer.parseInt($[2]);if(k==0)System.out.println(query(1,a,b));else modify(1,a,b);}}
}class Node{int l,r,sum;public Node(int l,int r,int sum){this.l=l;this.r=r;this.sum=sum;}
}
相关文章:

线段数--算法
线段树是常用来维护 区间信息 的数据结构 线段树可以在 O(logN) 的时间复杂度内实现 单点修改区间修改区间查询 区间求和求区间最大值求区间最小值 简单介绍一下线段树 线段树是一个将区间内的数不断细分的一种数据结构,也就是一个完全二叉树,用每一…...

JS的DOM操作和事件监听综合练习 (具备三种功能的轮播图案例)
下面是是对dom操作的一个综合练习 下面代码是html的基本骨架(没有任何的功能): <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" c…...

低温存储开关机问题
问题: 某消费电子产品在进行可靠性实验室,在低温-30C存储两个小时后,上电不开机。在常温25C时,开关机正常。 分析: 1、接串口抓log信息,从打印信息可以看出uboot可以起来,在跑kernel时&#x…...

mysql系列1—mysql架构和协议介绍
背景: 本文开始整理mysql相关的文章,用于收集数据库相关内容;包括mysql架构和存储方式、索引结构和查询优化、数据库锁等内容。思考如何根据具体的业务给出最优的分表规划和表设计、字段选择和索引设计、优化的SQL语句,以及数据库…...
设计模式——模板模式
定义与基本概念 模板模式(Template Pattern)是一种行为设计模式。它在一个抽象类中定义了一个操作的算法骨架,将一些步骤的实现延迟到具体子类中。这个抽象类就像是一个模板,定义了执行某个流程的基本框架,而具体的细…...

CV22_语义分割基础
1. 常见的分割类型 在计算机视觉领域,根据不同的应用场景和需求,分割任务可以分为几种主要类型。以下是几种常见的分割类型: 语义分割(Semantic Segmentation): 语义分割的目标是将图像中的每个像素分配到…...

Dubbo源码解析-Dubbo的线程模型(九)
一、Dubbo线程模型 首先明确一个基本概念:IO 线程和业务线程的区别 IO 线程:配置在netty 连接点的用于处理网络数据的线程,主要处理编解码等直接与网络数据 打交道的事件。 业务线程:用于处理具体业务逻辑的线程,可以…...

【Canvas与标志】圆角三角形生化危险警示标志
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>圆角三角形生化危险警示标志 Draft1</title><style type&qu…...
解决Dcat Admin laravel框架登录报错问题,(blocked:mixed-content)
前言 在使用 Dcat Admin 后台登录时,发生 error 报错:(blocked:mixed-content) xhr VM484:1,浏览器拦截 其实这是浏览器在 HTTPS 页面中尝试加载 HTTP 资源,导致浏览器阻止了这些不安全的请求。 解决 在 .env 文件中添加或修改 AD…...

(三)Sping Boot学习——升级jdk1.8-jdk18
1.修改系统环境变量。 2.idea中修改配置。 3.项目setting中设置修改 4.更新后还要重新下载依赖mvn clean install ,并且记住reload 项目。同时查看java -version查看一下jdk版本。...

语言模型中的多模态链式推理
神经网络的公式推导 简介摘要引言多模态思维链推理的挑战多模态CoT框架多模态CoT模型架构细节编码模块融合模块解码模块 实验结果运行代码补充细节安装包下载Flan-T5数据集准备rougenltkall-MiniLM-L6-v2运行 简介 本文主要对2023一篇论文《Multimodal Chain-of-Thought Reason…...

SCons:下一代构建工具,如何用 Python 驱动高效构建?
在现代软件开发中,构建工具是开发流程中不可或缺的一环。无论是小型项目还是跨平台的复杂工程,选择一个高效、灵活的工具都能显著提高开发效率和代码质量。SCons,一个以 Python 为基础的构建工具,通过自动化依赖管理、灵活的扩展性…...

springboot 整合 rabbitMQ (延迟队列)
前言: 延迟队列是一个内部有序的数据结构,其主要功能体现在其延时特性上。这种队列存储的元素都设定了特定的处理时间,意味着它们需要在规定的时间点或者延迟之后才能被取出并进行相应的处理。简而言之,延时队列被设计用于存放那…...

ES 基本使用与二次封装
概述 基本了解 Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它提供了对海量数据的快速全文搜索、结构化搜索和分析功能,是目前流行的大数据处理工具之一。主要特点即高效搜索、分布式存储、拓展性强 核心功能 全文搜索:…...

分割一切2.0,SAM2详解
🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年11月24日20点03分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文链接 点击开启你的论文编程之旅…...
Spring AI Fluent API:与AI模型通信的流畅体验
引言 随着人工智能(AI)技术的飞速发展,越来越多的应用场景开始融入AI技术以提升用户体验和系统效率。在Java开发中,与AI模型通信成为了一个重要而常见的需求。为了满足这一需求,Spring AI引入了ChatClient,…...

基于python的长津湖评论数据分析与可视化,使用是svm情感分析建模
引言 研究背景及意义 上世纪初开始,中国电影就以自己独有的姿态登上了世界电影史的舞台。中国电影作为国家文化和思想观念的反映与延伸,能够增强文化自信,在文化输出方面有着极其重要的作用1[1]。 改革开放以来,随着生产力的提高…...

Lucene(2):Springboot整合全文检索引擎TermInSetQuery应用实例附源码
前言 本章代码已分享至Gitee: https://gitee.com/lengcz/springbootlucene01 接上文。Lucene(1):Springboot整合全文检索引擎Lucene常规入门附源码 如何在指定范围内查询。从lucene 7 开始,filter 被弃用,导致无法进行调节过滤。 TermInSetQuery 指定…...
shell完结
声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

【2024最新】基于Springboot+Vue的智慧食堂系统Lw+PPT
作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...