【前缀和与差分 C/C++】洛谷 P8218 求区间和

2025 - 03 - 09 - 第 72 篇
Author: 郑龙浩 / 仟濹
【前缀和与差分 C/C++】

文章目录

  • 洛谷 P8218 求区间和
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例 #1
      • 输入 #1
      • 输出 #1
    • 说明/提示
    • 思路
    • 代码

洛谷 P8218 求区间和

题目描述

给定 n n n 个正整数组成的数列 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots, a_n a1,a2,,an m m m 个区间 [ l i , r i ] [l_i,r_i] [li,ri],分别求这 m m m 个区间的区间和。

对于所有测试数据, n , m ≤ 1 0 5 , a i ≤ 1 0 4 n,m\le10^5,a_i\le 10^4 n,m105,ai104

输入格式

第一行,为一个正整数 n n n

第二行,为 n n n 个正整数 a 1 , a 2 , ⋯ , a n a_1,a_2, \cdots ,a_n a1,a2,,an

第三行,为一个正整数 m m m

接下来 m m m 行,每行为两个正整数 l i , r i l_i,r_i li,ri ,满足 1 ≤ l i ≤ r i ≤ n 1\le l_i\le r_i\le n 1lirin

输出格式

m m m 行。

i i i 行为第 i i i 组答案的询问。

输入输出样例 #1

输入 #1

4
4 3 2 1
2
1 4
2 3

输出 #1

10
5

说明/提示

样例解释:第 1 1 1 到第 4 4 4 个数加起来和为 10 10 10。第 2 2 2 个数到第 3 3 3 个数加起来和为 5 5 5

对于 50 % 50 \% 50% 的数据: n , m ≤ 1000 n,m\le 1000 n,m1000

对于 100 % 100 \% 100% 的数据: 1 ≤ n , m ≤ 1 0 5 1 \le n, m\le 10^5 1n,m105 1 ≤ a i ≤ 1 0 4 1 \le a_i\le 10^4 1ai104

思路

典型的的一维前缀和做法,不做具体的描述了。

我已将常规的一维前缀和笔记详细记录,具体内容可见我的博客,如下

一维前缀和算法
https://blog.csdn.net/m0_60605989/article/details/146117026?fromshare=blogdetail&sharetype=blogdetail&sharerId=146117026&sharerefer=PC&sharesource=m0_60605989&sharefrom=from_link

代码

// 洛谷P8218求区间和
// Author: 郑龙浩 / 仟濹
// Time: 2025-03-09
// 这道题是一个明显的一维前缀和
#include <bits/stdc++.h>
using namespace std;
// 列表
vector <int> arr;
// 前缀和数组
vector <int> sum;
int num, m;
// 计算区间和的函数 - 利用前缀和
int get_sum(int left, int right){int ans;// 注意判断,如果left是0,0-1 == -1,没有这个下标,不合法,应该特判if (left == 0)  return sum[right];// 正常套用公式即可ans = sum[right] - sum[left - 1];return ans;
}
int main( void ){cin >> num;arr.resize(num); // 设置 arr 原数列大小sum.resize(num); // 设置 sum 前缀和 大小// 输入数列for (int i = 0; i < num; i ++)cin >> arr[i];cin >> m;// 计算前缀和sum[0] = arr[0];for(int i = 1; i < num; i ++){sum[i] = sum[i - 1] + arr[i];}int left, right;// 输入 m 个区间,边输入边运算for (int i = 0; i < m; i ++){cin >> left >> right; // 输入的是第几个,而不是下标left -= 1; // 变为下标right -= 1; // 变为下标cout << get_sum(left, right) << endl;}return 0;
}

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

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

相关文章

初识Bert

在学习Bert之前我们先了解“递归神经网络&#xff08;RNN Recurrent neural network)” 和 “长短期记忆&#xff08;LSTM Long short-term memory)” 我们如果仅仅识别每个字的含义&#xff0c;那么在一句话中没有相同的字还是可以的但是如果一句话中有相同的字&#xff0c;那…

clickhouse源码分析

《ClickHouse源码分析》 当我们谈论数据库时&#xff0c;ClickHouse是一个不容忽视的名字。它是一个用于联机分析处理&#xff08;OLAP&#xff09;的列式数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;以其快速的数据查询能力而闻名。对于想要深入了解这个高效工具…

[网络爬虫] 动态网页抓取 — Selenium 元素定位

&#x1f31f;想系统化学习爬虫技术&#xff1f;看看这个&#xff1a;[数据抓取] Python 网络爬虫 - 学习手册-CSDN博客 在使用 Selenium 时&#xff0c;往往需要先定位到指定元素&#xff0c;然后再执行相应的操作。例如&#xff0c;再向文本输入框中输入文字之前&#xff0c;…

ArcGIS操作:15 计算点的经纬度,并添加到属性表

注意&#xff1a;需要转化为地理坐标系 1、打开属性表&#xff0c;添加字段 2、计算字段&#xff08;以计算纬度为例 !Shape!.centroid.Y ) 3、效果

[项目]基于FreeRTOS的STM32四轴飞行器: 七.遥控器按键

基于FreeRTOS的STM32四轴飞行器: 七.遥控器 一.遥控器按键摇杆功能说明二.摇杆和按键的配置三.按键扫描 一.遥控器按键摇杆功能说明 两个手柄四个ADC。 左侧手柄&#xff1a; 前后推为飞控油门&#xff0c;左右推为控制飞机偏航角。 右侧手柄&#xff1a; 控制飞机飞行方向&a…

Redis 内存淘汰策略深度解析

Redis 作为高性能的内存数据库&#xff0c;其内存资源的高效管理直接关系到系统的稳定性和性能。当 Redis 的内存使用达到配置的最大值&#xff08;maxmemory&#xff09;时&#xff0c;新的写入操作将触发内存淘汰机制&#xff08;Eviction Policy&#xff09;&#xff0c;以释…

【面试】Java 集合

集合 1、常见的集合有哪些2、说说 List、Set、Queue、Map 四者的区别3、Collection 和 Collections 有什么区别4、Comparable 和 Comparator 的区别5、ArrayList 和 LinkedList 的区别是什么6、ArrayList 和 Vector 的区别是什么7、ArrayList 和 Vector 的扩容机制8、CopyOnWri…

【c++】平移字符串

说明 实现字符串的左移与右移 示例代码 #include <iostream> #include <string> using namespace std;int main() {string str1 "12345";//左移2位string str2 str1.substr(2) str1.substr(0, 2);cout << str2 << endl;//右移2位&…

密码学(终极版)

加密 & 解密 备注&#xff1a;密码学领域不存在完全不能破解的密码&#xff0c;但是如果一个密码需要很久很久&#xff0c;例如一万年才能破解&#xff0c;就认为这个密码是安全的了。 对称加密 非对称加密 公钥加密、私钥解密 私钥签名、公钥认证 非对称的底层原理是…

FreeRTOS任务状态查询

一.任务相关API vTaskList&#xff08;&#xff09;&#xff0c;创建一个表格描述每个任务的详细信息 char biaoge[1000]; //定义一个缓存 vTaskList(biaoge); //将表格存到这缓存中 printf("%s /r/n",biaoge); 1.uxTaskPriorityGet&#xff08;&#xf…

yolov5代码详解--3.python代码脚本

三、val.py val.py的主要作用是对训练好的模型进行验证&#xff08;或评估&#xff09;。具体来说&#xff0c;它用于在指定的验证集上评估模型的性能&#xff0c;计算各项评估指标&#xff0c;并输出结果。val.py通常在模型训练完成后运行&#xff0c;用于验证模型的检测精度、…

无人机应用探索:玻纤增强复合材料的疲劳性能研究

随着无人机技术的快速发展&#xff0c;轻量化已成为其结构设计的核心需求。玻纤增强复合材料凭借高强度、低密度和优异的耐环境性能&#xff0c;成为无人机机身、旋翼支架等关键部件的理想选择。然而&#xff0c;无人机在服役过程中需应对复杂多变的环境&#xff1a;高空飞行时…

Python SQLite3 保姆级教程:从零开始学数据库操作

Python SQLite3 保姆级教程&#xff1a;从零开始学数据库操作 本文适合纯新手&#xff01;无需任何数据库基础&#xff0c;跟着步骤操作即可掌握 SQLite3 的核心用法。 目标&#xff1a;让你像用记事本一样轻松操作数据库&#xff01; 目录 什么是 SQLite3&#xff1f;环境准…

C语言中的整数类型(short,int,long和long long)

整数是编程中最常见的一种数据类型&#xff0c;C语言提供了多种整数类型&#xff0c;包括 short、int、long 和 long long&#xff0c;它们的主要区别在于存储范围和内存占用的大小。 本节将详细讲解这些整数类型的定义、特性、使用场景以及注意事项&#xff0c;帮助你全面理解…

使用jcodec库,访问网络视频提取封面图片上传至oss

注释部分为FFmpeg&#xff08;确实方便但依赖太大&#xff0c;不想用&#xff09; package com.zuodou.upload;import com.aliyun.oss.OSS; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectRequest; import com.zuodou.oss.OssProperties;…

游戏引擎学习第147天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾 具体来说&#xff0c;我们通过隐式计算来解决问题&#xff0c;而不是像数字微分分析器那样逐步增加数据。我们已经涵盖了这个部分&#xff0c;并计划继续处理音量问题。不过&#xff0c;实际上我们现在不需要继续处理…

使用Dockerfile打包java项目生成镜像部署到Linux_java项目打docker镜像的dockerfile

比起容器、镜像来说&#xff0c;Dockerfile 非常普通&#xff0c;它就是一个纯文本&#xff0c;里面记录了一系列的构建指令&#xff0c;比如选择基础镜像、拷贝文件、运行脚本等等&#xff0c;每个指令都会生成一个 Layer&#xff0c;而 Docker 顺序执行这个文件里的所有步骤&…

Linux -- 磁盘结构、文件系统ext2

一、磁盘 1.磁盘的物理结构 2.磁盘的存储结构 盘片&#xff1a;是机械硬盘存储数据的主要介质&#xff0c;一般由铝合金或玻璃等材料制成&#xff0c;表面涂有一层磁性材料。数据通过磁头在盘片的磁性涂层上进行磁化来记录&#xff0c;磁化的不同方向代表二进制的 0 和 1。盘面…

标量、向量、矩阵与张量:从维度理解数据结构的层次

在数学和计算机科学中,维度描述了数据结构的复杂性,而标量、向量、矩阵、张量则是不同维度的数据表示形式。它们的关系可以理解为从简单到复杂的扩展,以下是详细解析: 1. 标量(Scalar):0维数据 定义:单个数值,没有方向,只有大小。 维度:0维(无索引)。 示例: 温度…

点云数据处理--splat转3dtiles

文章目录 处理流程简介核心功能实现数据读取与格式转换定义Point类数据读取splat转gltf 点云数据分割定义四叉树递归生成3dtiles瓦片 生成tileset.json递归生成tileset.json计算box 主函数调用渲染 下一步工作性能优化渲染效果调优其他 源码地址&#xff1a; github 处理流程简…