动态求连续区间和(线段树 树状数组)

 向上更新,建树,求区间和,修改节点值

向上更新:

返回左右节点值的和

建树:

如果是叶子节点,赋值结构体的左区间,右区间,值

如果不是叶子节点,那么先求中点,建左子树(l到mid),建右子树(mid+1到r)

最后向上更新pushup

查询区间和:

如果这个区间被覆盖,直接返回值

如果没有被覆盖,求中间节点

定义一个sum

1️⃣如果所求区间左节点小于或等于mid,去查询这个左区间的值 ,并加到sum中

2️⃣如果所求区间右节点大于mid,去查询这个右区间的值,并加到sum中

修改节点值:

如果找到节点 直接加上目标值

如果没找到,求中点

如果目标节点 <=mid 向左寻找

如果目标节点 >mid 向右寻找

修改后要向上更新

树状数组

 构建树状数组:用change函数构建

for (int i = 1;i <= n;i++) {scanf("%d",&arr[i]);}for (int i = 1;i <= n;i++) {change(i,arr[i]);}

暴力:

#include <iostream>
#include <cstdio>using namespace std;const int N = 100010;int f[N];int main() {int n , m;scanf("%d%d",&n,&m);for (int i = 1;i <= n;i++) {scanf("%d",&f[i]);}while (m--) {int k,a,b;scanf("%d%d%d",&k,&a,&b);if (k == 1) {f[a] += b;}else {int num = 0;for (int i = a;i <= b;i++) {num += f[i];}printf("%d\n",num);}}return 0;
}

线段树:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>using namespace std;const int N = 100010;struct Node{int l,r;int sum;
}tr[4*N];int w[N];
int n,m;
int k,a,b;void pushup(int u) {    tr[u].sum = tr[u<<1].sum + tr[u<<1|1].sum;
}void build(int u,int l,int r) {if (l == r) tr[u] = {l,r,w[r]};else {tr[u] = {l,r};int mid = l + r >> 1;build(u<<1,l,mid),build(u<<1|1,mid+1,r);pushup(u);}
}int query(int u,int x,int y) {if (x <= tr[u].l && y >= tr[u].r) return tr[u].sum;int mid = tr[u].l + tr[u].r >> 1;int sum = 0;if (x <= mid) sum = query(u<<1,x,y);if (y > mid) sum += query(u<<1|1,x,y);return sum;
}void modify(int u,int x,int v) {if (tr[u].l == tr[u].r) tr[u].sum += v;else {int mid = tr[u].l + tr[u].r >> 1;if (x <= mid) modify(u<<1,x,v);if (x > mid) modify(u<<1|1,x,v);pushup(u);}
}int main() {scanf("%d%d",&n,&m);for (int i = 1;i <= n;i++) {scanf("%d",&w[i]);}build(1,1,n);while (m--) {scanf("%d%d%d",&k,&a,&b);if (k == 0) printf("%d\n",query(1,a,b));else modify(1,a,b); }return 0;
}

树状数组:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>using namespace std;const int N = 100010;int n , m;
int k , a ,b;
int tr[N],arr[N];int lowbit(int x) {return x & -x;
}void add(int x,int v) {while (x <= n) tr[x]+=v,x += lowbit(x);
}int query(int x)
{int res = 0;while (x) res += tr[x],x -= lowbit(x);return res;
}int main() {scanf("%d%d",&n,&m);for (int i = 1;i <= n;i++) {scanf("%d",&arr[i]);}for (int i = 1;i <= n;i++) {add(i,arr[i]);}while (m --) {scanf("%d%d%d",&k,&a,&b);if (k == 0) {printf("%d\n",query(b) - query(a-1));}else {add(a,b);}}return 0;
}

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

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

相关文章

聊聊Flink:这次把Flink的window分类(滚动、滑动、会话、全局)、窗口函数讲透

一、窗口 窗口&#xff08;Window&#xff09;是处理无界流的关键所在。窗口将流分成有限大小的“桶”&#xff0c;我们可以在其上应用算子计算。Flink可以使用window()和windowAll()定义一个窗口&#xff0c;二者都需要传入一个窗口分配器WindowAssigner&#xff0c;WindowAs…

友思特新闻 | 友思特荣获广州科技创新创业大赛智能装备行业赛初创组优胜企业!

2024年11月19日&#xff0c;第十三届中国创新创业大赛&#xff08;广东广州赛区&#xff09;暨2024年广州科技创新创业大赛智能装备行业赛颁奖典礼隆重举行。 赛事奖项介绍&#xff1a;广州科技创新创业大赛智能装备行业赛 第十三届“中国创新创业大赛&#xff08;广东广州赛区…

2024强网拟态决赛-eBeepf

漏洞分析与利用 分析后面看情况吧&#xff0c;有时间再写吧&#xff0c;先贴个利用脚本&#xff1a; #ifndef _GNU_SOURCE #define _GNU_SOURCE #endif#include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> #include <…

Kotlin Multiplatform 未来将采用基于 JetBrains Fleet 定制的独立 IDE

近期 Jetbrains 可以说是动作不断&#xff0c;我们刚介绍了 IntelliJ IDEA 2024.3 K2 模式发布了稳定版支持 &#xff0c;而在官方最近刚调整过的 Kotlin Multiplatform Roadmap 优先关键事项里&#xff0c;可以看到其中就包含了「独立的 Kotlin Multiplatform IDE&#xff0c;…

38_转置卷积

转置卷积也被称为&#xff08;Transposed Convolution&#xff09;&#xff0c;也被称为fractionally_strided convolution、deconvolution。 转置卷积不是卷积的逆运算。 转置卷积也是卷积 转置卷积的作用是上采样。 1. 基础概念 转置卷积&#xff08;Transposed Convolution…

【Linux】内核的编译和加载

Linux内核是操作系统的核心&#xff0c;负责管理系统的硬件资源&#xff0c;并为用户空间的应用程序提供必要的服务。内核的编译和加载是操作系统开发和维护的重要环节。本文将详细介绍Linux内核的编译过程以及如何加载内核到系统中。 1. 引言 Linux内核的编译是一个复杂的过…

Qt桌面应用开发 第七天(绘图事件 绘图设备)

目录 1.绘图事件paintEvent 2.高级绘图 3.图片绘制 4.绘图设备 4.1QPixmap 4.2QBitmap 4.3QImage 4.4QPicture 1.绘图事件paintEvent paintEvent——绘图事件 需求&#xff1a;利用QPainter绘制点、线、圆、矩形、文字&#xff1b;设置画笔改为红色&#xff0c;宽度为…

使用IDEA构建springboot项目+整合Mybatis

目录 目录 1.Springboot简介 2.SpringBoot的工作流程 3.SpringBoot框架的搭建和配置 4.用Springboot实现一个基本的select操作 5.SpringBoot项目部署非常简单&#xff0c;springBoot内嵌了 Tomcat、Jetty、Undertow 三种容器&#xff0c;其默认嵌入的容器是 Tomcat&#xff0c;…

【含开题报告+文档+PPT+源码】基于SSM的电影数据挖掘与分析可视化系统设计与实现

开题报告 随着互联网的普及和数字娱乐产业的蓬勃发展&#xff0c;电影作为一种重要的娱乐方式&#xff0c;已经深入人们的日常生活。然而&#xff0c;面对海量的电影资源&#xff0c;用户在选择观影内容时常常感到困惑和无所适从。传统的电影推荐方式&#xff0c;如人工筛选、…

C++使用minio-cpp(minio官方C++ SDK)与minio服务器交互简介

目录 minio简介minio-cpp简介minio-cpp使用 minio简介 minio是一个开源的高性能对象存储解决方案&#xff0c;完全兼容Amazon S3 API&#xff0c;支持分布式存储&#xff0c;适用于大规模数据架构&#xff0c;容易集成&#xff0c;而且可以方便的部署在集群中。 如果你已经部…

【君正T31开发记录】8.了解rtsp协议及设计模式

前边搞定了驱动&#xff0c;先不着急直接上手撸应用层的代码&#xff0c;先了解一下大致要用到的东西。 设计PC端先用vlc rtsp暂时H264编码&#xff08;vlc好像不支持h265,这个后边我试试&#xff09;的视频流&#xff0c;先需要支持上rtsp server&#xff0c;了解rtsp协议是必…

JavaScript中的this指向绑定规则(超全)

JavaScript中的this指向绑定规则&#xff08;超全&#xff09; 1.1 为什么需要this? 为什么需要this? 在常见的编程语言中&#xff0c;几乎都有this这个关键字&#xff08;Objective-C中使用的是self),但是在JavaScript中的this和常见的面向对象语言中的this不太一样 常见面…

Spring注入Map学习

Spring注入Map学习 在Spring中 在策略模式中, 会经常用到 根据Bean名称获取Bean的实例 有2个方法很好用 1. 使用Autowired注入 2. 使用构造方法注入 但是奇怪的一点是: 日志打印并没有看到结果, 第一行的 Autowired的结果 是个null 那是因为 注入时机 的问题 注入时机&…

Redis五大基本类型——Set集合命令详解(命令用法详解+思维导图详解)

目录 一、Set集合类型介绍 二、常见命令 1、SADD 2、SMEMBERS 3、SISMEMBER 4、SCARD 5、SRANDMEMBER 6、SPOP 7、SMOVE 8、SREM ​编辑 9、集合间操作 &#xff08;1&#xff09;SINTER &#xff08;2&#xff09;SINTERSTORE &#xff08;3&#xff09;SUNION…

sql 查询语句:将终端数据形式转换成insert语句

文本转换&#xff1a;sql 查询语句&#xff1a;将终端数据形式转换成insert语句 如上&#xff0c;写过后端的都知道&#xff0c;从生产或其他地方拿到的数据&#xff0c;有可能会是图一&#xff1b;但实际上&#xff0c;我们需要图二的数据&#xff1b; 不废话&#xff0c;直接…

C++数据结构与算法

C数据结构与算法 1.顺序表代码模版 C顺序表模版 #include <iostream> using namespace std; // 可以根据需要灵活变更类型 #define EleType intstruct SeqList {EleType* elements;int size;int capacity; };// Init a SeqList void InitList(SeqList* list, int capa…

【AIGC】大模型面试高频考点-RAG篇

【AIGC】大模型面试高频考点-RAG篇 &#xff08;1&#xff09;RAG的基本原理&#xff08;2&#xff09;RAG有哪些评估方法&#xff1f;&#xff08;3&#xff09;RAG有哪些评估框架&#xff1f;&#xff08;4&#xff09;RAG各模块有哪些优化策略&#xff1f; &#xff08;1&am…

标准操作规程(SOP)制定方法+模板指南

在企业的成功之路上&#xff0c;拥有制定、传播以及管理流程文档与详细步骤指南的能力至关重要。众多组织都将标准操作规程&#xff08;SOP&#xff09;作为指导其工作流程操作的核心文档形式。 但SOP的作用远不止于操作指南&#xff1b;它们更像是高性能车辆中的精密GPS系统。…

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律

硬件工程师零基础入门:一.电子设计安全要点与欧姆定律 第一节 电子设计安全要点第二节 欧姆定律 第一节 电子设计安全要点 电路小白最好先买直流稳压电源&#xff08;将高压转成低压直流电&#xff09;使用&#xff0c;尽量不要使用市电。 1.尽量不要捏住电源两端。 正确做法&a…

ShuffleNet:一种为移动设备设计的极致高效的卷积神经网络

摘要 https://arxiv.org/pdf/1707.01083 我们介绍了一种名为ShuffleNet的计算效率极高的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;该架构专为计算能力非常有限的移动设备&#xff08;例如10-150 MFLOPs&#xff09;而设计。新架构利用两种新操作&#xff1a;逐…