前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >前缀和讲解

前缀和讲解

作者头像
GeekLiHua
发布2025-01-21 15:26:53
发布2025-01-21 15:26:53
1300
代码可运行
举报
文章被收录于专栏:JavaJava
运行总次数:0
代码可运行

前缀和

输入一个长度为 n 的整数序列。

接下来再输入 m 个询问,每个询问输入一对 l,r。

对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。

输入格式 第一行包含两个整数 n 和 m。

第二行包含 n 个整数,表示整数数列。

接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。

输出格式 共 m 行,每行输出一个询问的结果。

数据范围 1≤l≤r≤n, 1≤n,m≤100000, −1000≤数列中元素的值≤1000 输入样例: 5 3 2 1 3 6 4 1 2 1 3 2 4 输出样例: 3 6 10

前缀和讲解

什么是前缀和 原数组: a[1], a[2], a[3], a[4], a[5], …, a[n] 前缀和 Si为数组的前 i项和 前缀和: S[i] = a[1] + a[2] + a[3] + … + a[i]

注意: 前缀和的下标一定要从 1开始, 避免进行下标的转换

s[0] = 0 s[1] = a[1] s[2] = a[1] + a[2]

前缀和的作用 快速求出元素组中某段区间的和

求 [l, r]中的和, 即为 S[r] - S[l-1]

提交代码

代码语言:javascript
代码运行次数:0
复制
import java.util.*;
import java.io.*;

public class Main
{
    public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String [] strs = reader.readLine().trim().split(" ");
        int n = Integer.parseInt(strs[0]);
        int k = Integer.parseInt(strs[1]);
        strs = reader.readLine().trim().split(" ");
        int a [] = new int [n + 10];
        for (int i = 1; i <= n; ++ i) a[i] = Integer.parseInt(strs[i - 1]);
        int [] sum = new int [n + 10];
        for (int i = 1; i <= n; ++ i) sum[i] = a[i] + sum[i - 1];
        while(k -- > 0)
        {
            strs = reader.readLine().trim().split(" ");
            int b1 = Integer.parseInt(strs[0]);
            int b2 = Integer.parseInt(strs[1]);
            System.out.println(sum[b2] - sum[b1 - 1]);
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前缀和
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档