首页 > 编程语言 >算法刷题笔记 前缀和(C++实现)

算法刷题笔记 前缀和(C++实现)

时间:2024-05-26 20:59:04浏览次数:27  
标签:前缀 int sum C++ 整数 数组 输入 刷题

文章目录

题目描述

  • 输入一个长度为n的整数序列。
  • 接下来再输入m个询问,每个询问输入一对l,r
  • 对于每个询问,输出原序列中从第l个数到第r个数的和。

输入格式

  • 第一行包含两个整数nm
  • 第二行包含n个整数,表示整数数列。
  • 接下来m行,每行包含两个整数lr,表示一个询问的区间范围。

输出格式

  • m行,每行输出一个询问的结果。

数据范围

  • 1 ≤ l ≤ r ≤ n
  • 1 ≤ n,m ≤ 100000
  • −1000 ≤ 数列中元素的值 ≤ 1000

基本思路

本题有两种思路:

  • 第一种:首先存储用户输入的数组,然后每次根据用户输入的区间,将指定区间内所有的数值相加。但是,这种思路需要每一次处理都要进行多次加法运算,有些浪费时间。
  • 第二种:直接使用一个数组存储到目前位置为止的数组前缀和。例如,对于数组 1 2 3,对应的前缀和数组为 1 3 6(因为 3 = 1 + 2,6 = 1 + 2 + 3),这样,计算某个区间内元素的累加值,只需要将前缀和数组中的两个元素相减即可。具体来说,当区间的右端点是right,左端点是left时,只需要计算数组中下标为right元素减去下标为left-1的元素的值即可。这种思路明显更加节约时间。

实现代码

#include <cstdio>
#include <vector>
using namespace std;

int main(void)
{
    int n, m;
    scanf("%d %d", &n, &m);
    vector<int> sum;
    sum.push_back(0);
    int x;
    for(int i(1); i <= n; ++i) 
    {
        scanf("%d", &x);
        sum.push_back(sum[i - 1] + x);
    }
    
    int pos1, pos2;
    for(int i(0); i < m; ++i)
    {
        scanf("%d %d", &pos1, &pos2);
        printf("%d\n", sum[pos2] - sum[pos1 - 1]);
    }
    return 0;
}

标签:前缀,int,sum,C++,整数,数组,输入,刷题
From: https://blog.csdn.net/hanmo22357/article/details/139216306

相关文章

  • 算法刷题笔记 数的范围(C++实现)(二分法重要例题)
    文章目录题目描述题目思路题目代码(C++)题目感想题目描述给定一个按照升序排列的长度为n的整数数组,以及q个查询。对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。如果数组中不存在该元素,则返回-1-1。输入格式:第一行包含整数n和q,表示数组长度和询......
  • 【C++风云录】走进数字农业:农业科学与粮食安全
    跨越边界:农业模拟库的编程特性与应用领域前言在本篇文章中,我们将深入探讨六个领域的软件库—APSIM,AgroLib,CropModelMKS,SoilR,Bionet和FSEarth。这些库均用于农业生态系统建模、作物模拟、农业数据处理和分析、合成作物模型构造、土壤碳氮循环模型集成、生物网络模拟以及农......
  • 【C++】牛客 ——DP36 abb
    ✨题目链接:DP36abb✨题目描述 leafee最近爱上了abb型语句,比如“叠词词”、“恶心心”leafee拿到了一个只含有小写字母的字符串,她想知道有多少个"abb"型的子序列?定义:abb型字符串满足以下条件:字符串长度为3。字符串后两位相同。字符串前两位不同。✨输入......
  • 2024年华为OD机试真题-计算面积-C++-OD统一考试(D卷)
     2024年OD统一考试(D卷)完整题库:华为OD机试2024年最新题库(Python、JAVA、C++合集)题目描述:绘图机器的绘图笔初始位置在原点(0,0),机器启动后其绘图笔按下面规则绘制直线:1)尝试沿着横向坐标轴正向绘制直线,直到给定的终点值E。2)期间可通过指令在纵坐标轴方向进行偏移,并同时绘制直......
  • 线程池(C++)
    个人主页:Lei宝啊 愿所有美好如期而遇线程池实现线程类#pragmaonce#include<pthread.h>#include<iostream>#include<vector>#include<string>#include<cstdlib>#include<cstring>#include<functional>#include<unistd.h>#in......
  • C++——list的实现以及源码
    前言:最近学习了c++list的实现,这让我对迭代器的理解又上升了一个新的高度,注意:代码里的list是放在一个叫zgw的命名空间里边,但是在实现list的代码中没有加namespace,这里给个注意,以后复习时能看懂。list的节点:我们首先需要搞出一个list的节点,来存储数据,以及节点的下一个指针,和节......
  • 自用:常见算法竞赛/刷题问题 & 模板
    以下是我平常刷题遇到的部分常见问题,随手记录一下。(不定时更新)基本算法二维前缀和for(inti=1;i<=m;++i){ for(intj=1;j<=n;++j) { pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+nums[i][j]; }}//异或版本for(inti=1;i......
  • C和C++内存管理
    C和C++的内存管理C/C++中程序内存区域的划分C语言中动态内存管理方式C++中动态内存管理方式new和delete操作内置类型new和delete操作自定义类型operratornew函数和operatordelete函数new和delete的实现原理内置类型自定义类型new的原理delete的原理newT[N]的原理dele......
  • CCF-GESP 等级考试 2024年3月认证C++一级真题解析
    2024年03月真题1单选题第1题C++表达式(3-2)*3+5的值是()。A.-13B.8C.2D.0正确答案:B.8解析:首先计算括号中的表达式(3-2),得到(1)。接下来进行乘法运算(1*3),得到(3)。最后进行加法运算(3+5),得到(8)。因此,表达式的值是(8)。第2题C++......
  • CCF-GESP 等级考试 2024年3月认证C++一级真题
    2024年03月真题1单选题第1题C++表达式(3-2)*3+5的值是()。A.-13B.8C.2D.0第2题C++语句cout<<"5%2="<<5%2执行后的输出是()。A.22B.11C.5%2=2D.5%2=1第3题执行C++语句cin>>a时如果输入5+2,下述说法正确的是()。A.变量a将被......