信息学奥赛一本通 1547:【 例 1】区间和

【题目链接】

ybt 1547:【 例 1】区间和

【题目考点】

1. 线段树
2. 树状数组

【解题思路】

本题要求维护区间和,实现单点修改、区间查询。

解法1:线段树

线段树原理,及实现方法见:洛谷 P3374 【模板】树状数组 1(线段树解法)

解法2:树状数组

本题也可以使用树状数组完成,知识点及实现方法见:洛谷 P3374 【模板】树状数组 1(树状数组解法)。

由于都是模板题,大同小异,本文不再进行详细解释。

【题解代码】

解法1:线段树

#include<bits/stdc++.h>
using namespace std;
#define N 100005
struct Node
{int l, r, m;long long val;
} tree[4*N];
int n, m;
void pushUp(int i)
{tree[i].val = tree[2*i].val+tree[2*i+1].val;
}
void build(int i, int l, int r)
{tree[i].l = l, tree[i].r = r, tree[i].m = (l+r)/2;if(l == r){tree[i].val = 0;return;}build(2*i, l, tree[i].m);build(2*i+1, tree[i].m+1, r);pushUp(i);
}
void update(int i, int x, int v)//a[x] += v
{if(tree[i].l == tree[i].r){tree[i].val += v;return;}if(x <= tree[i].m)update(2*i, x, v);elseupdate(2*i+1, x, v);pushUp(i);
} 
long long query(int i, int l, int r)
{if(l <= tree[i].l && tree[i].r <= r)return tree[i].val;long long s = 0;if(l <= tree[i].m)s += query(2*i, l, r);if(r > tree[i].m)s += query(2*i+1, l, r);return s;
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int k, x, y;cin >> n >> m;build(1, 1, n);while(m--){cin >> k >> x >> y;if(k == 0)update(1, x, y);elsecout << query(1, x, y) << '\n';}return 0;
}

解法2:树状数组

#include <bits/stdc++.h>
using namespace std;
#define N 100005
long long tree[N], n, m;//tree:树状数组 
int lowbit(int x)
{return x & -x;
}
void update(int i, long long v)//a[i] += v 单点修改 
{for(int x = i; x <= n; x += lowbit(x))tree[x] += v;
}
long long sum(int i)//求a[1]+...+a[i] 区间查询 
{long long s = 0;for(int x = i; x > 0; x -= lowbit(x))s += tree[x];return s;
}
long long query(int l, int r)//求a序列区间和[l, r] 
{return sum(r)-sum(l-1);
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);long long a, k, b;cin >> n >> m;for(int i = 1; i <= m; ++i){cin >> k >> a >> b;if(k == 0)update(a, b);elsecout << query(a, b) << '\n';	}return 0;
}

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

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

相关文章

力扣面试150题--求根节点到叶节点数字之和

Day 48 题目描述 思路 我们利用sum这个全局变量来保存总和值&#xff0c;递归函数sum来计算每个根到叶子节点路径所代表的数&#xff0c;由于我们需要遍历到每条根到叶子节点的路径&#xff0c;所有我采取了前序遍历&#xff0c;如果不是叶子节点&#xff0c;就计算到该节点代…

DJI上云API官方demo学习

1、websocket&#xff0c;所在位置如下图&#xff0c;调用的可以用//websocket搜索 2、用到的http客户端&#xff0c;axios 3、很多和后端交互都是走的http请求

uniapp开发小程序,如何根据权限动态配置按钮或页面内容

前言 写了好几个项目&#xff0c;发现小程序对权限控制非常麻烦&#xff0c;于是有了这个想法&#xff0c;但是网上找了一圈没有一个比较完善的讲解&#xff0c;因为小程序不支持自定义指令&#xff0c;所以不能像后台那样方便&#xff0c;于是就将几个博主的想法结合。 思路就…

LSTM+Transformer混合模型架构文档

LSTMTransformer混合模型架构文档 模型概述 本项目实现了一个LSTMTransformer混合模型&#xff0c;用于超临界机组协调控制系统的数据驱动建模。该模型结合了LSTM的时序建模能力和Transformer的自注意力机制&#xff0c;能够有效捕捉时间序列数据中的长期依赖关系和变量间的复…

测量尺子:多功能测量工具,科技改变生活

测量尺子是一款专业的测距仪测量万能工具箱类型手机APP&#xff0c;旨在为用户提供最贴心的测量助手。它拥有和现实测量仪器一样的测量标准&#xff0c;更简单便捷且精准的测量方式&#xff0c;最新AR科技测量更是大大拓宽了可以被测量的高度和深度。无论是日常使用、学习还是工…

结课作业01. 用户空间 MPU6050 体感鼠标驱动程序

目录 一. qt界面实现 二. 虚拟设备模拟模拟鼠标实现体感鼠标 2.1 函数声明 2.2 虚拟鼠标实现 2.2.1 虚拟鼠标创建函数 2.2.2 鼠标移动函数 2.2.3 鼠标点击函数 2.3 mpu6050相关函数实现 2.3.1 i2c设备初始化 2.3.2 mpu6050寄存器写入 2.3.3 mpu6050寄存器读取 2.3.…

深入浅出 Python Testcontainers:用容器优雅地编写集成测试

在现代软件开发中&#xff0c;自动化测试已成为敏捷开发与持续集成中的关键环节。单元测试可以快速验证函数或类的行为是否符合预期&#xff0c;而集成测试则确保多个模块协同工作时依然正确。问题是&#xff1a;如何让集成测试可靠、可重复且易于维护&#xff1f; 这时&#…

JVM 的垃圾回收器

新生代回收器 通性 会触发StW&#xff0c;暂停所有应用线程复制算法 Serial 单线程回收适合单线程系统 ParNew 多线程回收优先保证响应速度&#xff0c;降低 STW&#xff08;STW 越大&#xff0c;执行垃圾回收的时间越长&#xff0c;回收的垃圾越多&#xff0c;减少垃圾回…

【笔记】排查并解决Error in LLM call after 3 attempts: (status code: 502)

#工作记录 一、问题描述 在部署运行部署对冲基金分析工具 ai-hedge-fund 时&#xff0c;不断出现以下报错&#xff0c;导致项目运行异常&#xff1a; Error in LLM call after 3 attempts: (status code: 502) Error in LLM call after 3 attempts: [WinError 10054] 远程主…

GO 语言进阶之 Template 模板使用

更多个人笔记见&#xff1a; github个人笔记仓库 gitee 个人笔记仓库 个人学习&#xff0c;学习过程中还会不断补充&#xff5e; &#xff08;后续会更新在github上&#xff09; 文章目录 Template 模板基本示例语法1. 基本输出语法2. 控制结构3. 空白字符控制4. Must函数 Temp…

origin绘图之【如何将多条重叠、高度重叠的点线图、折线图分开】

在日常的数据可视化工作中&#xff0c;Origin 作为一款功能强大的科研绘图软件&#xff0c;广泛应用于实验数据处理、结果展示与论文图表制作等领域。然而&#xff0c;在处理多组数据、特别是绘制多条曲线的折线图或点线图时&#xff0c;常常会遇到这样一个困扰&#xff1a;多条…

Java基础 Day19

一、泛型&#xff08;JDK5引入&#xff09; 1、基本概念 在编译阶段约束操作的数据类型&#xff0c;并进行检查 好处&#xff1a;统一数据类型&#xff0c;将运行期的错误提升到了编译期 泛型的默认类型是 Object 2、泛型类 在创建类的时候写上泛型 在创建具体对象的时候…

Gitlab-Runner安装

文章目录 helm方式安装在K8S上参考gitlab CI/CD 文件变量缓存服务器K8S部署 docker镜像mavendocker安装docker buildx minionodehelmkubectlsonar-scanner-cli 问题清除cachehelm执行时无权限 下载镜像失败下载gitlab-runner镜像失败 Gitlab-ci中使用java前端 helm方式安装在K8…

在 Ubuntu linux系统中设置时区的方案

查看时区 在 Ubuntu 系统中&#xff0c;可以通过以下方法查看当前时区设置&#xff1a; 1. 使用 timedatectl 命令&#xff08;推荐&#xff09; 在终端运行以下命令&#xff1a; timedatectl输出示例&#xff1a; Local time: Sun 2025-05-25 10:30:00 CST Universal t…

YOLOv8模型剪枝笔记(DepGraph和Network Slimming网络瘦身)

文章目录 一、DepGraph剪枝(1)项目准备1)剪枝基础知识2)DepGraph剪枝论文解读12)DepGraph剪枝论文解读23)YOLO目标检测系列发展史4)YOLO网络架构(2)项目实战(YOLOv8应用DepGraph剪枝+finetune)1)安装软件环境(基础环境、Pytorch、YOLOv8)Windows1)安装软件环境(…

MySQL:11_事务

事务 一.CURD不加控制&#xff0c;会有什么问题&#xff1f; 二.什么是事务&#xff1f; 事务就是一组DML语句组成&#xff0c;这些语句在逻辑上存在相关性&#xff0c;这一组DML语句要么全部成功&#xff0c;要么全部失败&#xff0c;是一个整体。MySQL提供一种机制&#xf…

【notepad++如何设置成中文界面呢?】

“Notepad”是一款非常强大的文本编辑软件&#xff0c;将其界面设置成中文的方法如下&#xff1a; 一、工具&#xff0f;原料&#xff1a; 华为 Matebook 15、Windows 10、Notepad 8.4.6。 二 、具体步骤&#xff1a; 1、找到任意一个文本文件&#xff0c;比如 txt 格式的文…

职坐标嵌入式MCU/DSP与RTOS开发精讲

嵌入式系统开发作为现代智能设备与工业控制的核心技术领域&#xff0c;其架构设计与实现逻辑直接影响系统性能与可靠性。本课程以嵌入式系统架构为切入点&#xff0c;系统化梳理从硬件选型到软件调度的全链路知识体系&#xff0c;重点聚焦微控制器&#xff08;MCU&#xff09;与…

双深度Q网络(Double DQN)基础解析与python实例:训练稳定倒立摆

目录 1. 前言 2. Double DQN的核心思想 3. Double DQN 实例&#xff1a;倒立摆 4. Double DQN的关键改进点 5. 双重网络更新策略 6. 总结 1. 前言 在强化学习领域&#xff0c;深度Q网络&#xff08;DQN&#xff09;开启了利用深度学习解决复杂决策问题的新篇章。然而&am…

使用KubeKey快速部署k8s v1.31.8集群

实战环境涉及软件版本信息&#xff1a; 使用kubekey部署k8s 1. 操作系统基础配置 设置主机名、DNS解析、时钟同步、防火墙关闭、ssh免密登录等等系统基本设置 dnf install -y curl socat conntrack ebtables ipset ipvsadm 2. 安装部署 K8s 2.1 下载 KubeKey ###地址 https…