1081 子段求和(前缀和)

1081 子段求和(前缀和)(51NOD基础题)

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题

给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和。

例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1。3 + 7 + 9 = 19,输出19。

Input

第1行:一个数N,N为数组的长度(2 <= N <= 50000)。
第2 至 N + 1行:数组的N个元素。(-10^9 <= N[i] <= 10^9)
第N + 2行:1个数Q,Q为查询的数量。
第N + 3 至 N + Q + 2行:每行2个数,i,l(1 <= i <= N,i + l <= N)

Output

共Q行,对应Q次查询的计算结果。

Input示例

5
1
3
7
9
-1
4
1 2
2 2
3 2
1 5

Output示例

4
10
16
19
#include <cstdio>
#include <cstring>
#define LL long long
#define maxn 50000+500

LL n ;
LL num[maxn] ;
LL sum[maxn] ;
LL Q ;
LL left , len; 

int main(){
    while(~scanf("%lld" , &n)){
        memset(sum , 0 , sizeof(sum)) ; 

        for(int i=1 ; i<=n ; i++){//累加前缀和
            scanf("%lld" , &num[i]) ;
            sum[i] = sum[i-1] + num[i] ;
        }

        scanf("%lld" , &Q) ;
        for(int i=0 ; i<Q ; i++){//前缀和相减 求出起点left长度len数段的和
            scanf("%lld%lld" , &left , &len) ;
            printf("%lld\n" , sum[left+len-1] - sum[left-1]) ;
        }
    }
    return 0 ;
} 
时间: 2024-11-08 19:35:33

1081 子段求和(前缀和)的相关文章

1081 子段求和

1081 子段求和 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] <

(前缀和)51NOD 1081 子段求和

给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] <= 10^9) 第N + 2行:1个数Q,Q为查询的数量. 第N + 3 至 N + Q + 2行:每行2个数,

51nod 1081 子段求和

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出一个长度为N的数组,进行Q次查询,查询从第i个元素开始长度为l的子段所有元素之和. 例如,1 3 7 9 -1,查询第2个元素开始长度为3的子段和,1 {3 7 9} -1.3 + 7 + 9 = 19,输出19. Input 第1行:一个数N,N为数组的长度(2 <= N <= 50000). 第2 至 N + 1行:数组的N个元素.(-10^9 <= N[i] <= 10^9) 第N + 2行:1

【bzoj2901】矩阵求和 前缀和

题目描述 给出两个n*n的矩阵,m次询问它们的积中给定子矩阵的数值和. 输入 第一行两个正整数n,m. 接下来n行,每行n个非负整数,表示第一个矩阵. 接下来n行,每行n个非负整数,表示第二个矩阵. 接下来m行,每行四个正整数a,b,c,d,表示询问第一个矩阵与第二个矩阵的积中,以第a行第b列与第c行第d列为顶点的子矩阵中的元素和. 输出 对每次询问,输出一行一个整数,表示该次询问的答案. 样例输入 3 2 1 9 8 3 2 0 1 8 3 9 8 4 0 5 15 1 9 6 1 1 3 3

GXU - 7D - 区间求和 - 前缀和

https://oj.gxu.edu.cn/contest/7/problem/D 描述 有一个所有元素皆为0的数组A,有两种操作: 1 l r x表示将A区间[l,r]内所有数加上x: 2 l r表示将A区间[l,r]内从左往右数第i个数加上i: 给出m个操作,请输出操作结束后A中的最大值. 输入 第一行一个整数m,表示操作的个数 接下来有m行,表示操作的内容,具体格式与题目中一致 0<=m<=10^6 1<=l<=r<=10^6 0<=x<=10^9 输出 输

算法分析之最大子段求和

给定由n个整数(包含负整数)组成的序列a1,a2,...,an,求该序列子段和的最大值.当所有整数均为负值时定义其最大子段和为0.所求的最优值为: 例如,当(a1,a2, ……a7,a8)=(1,-3, 7,8,-4,12, -10,6)时,最大子段和为: 分治方法求解从问题的解的结构可以看出,它适合于用分治策略求解:如果将所给的序列a[1:n]分为长度相等的两段a[1:n/2]和a[n/2+1:n],分别求出这两段的最大子段和,则a[1:n]的最大子段和有三种情形:a[1:n]的最大子段和与a

Hdu 5147 Sequence II(树状数字 or 线段树 + 输入外挂 前缀和+后缀和)

题意: 给定1~n的一个排列 用A[]数组保存,问有多少下标(a,b,c,d)四元组满足: a 解析: 题目中n的范围是50000,O(n^2) 复杂度肯定超时.那么这题明显考察的是log2(n)的算法,对于这题可以用线段树或者树状数组,同时要用到输入外挂,不然会超时. 思路(参考别人做法) 枚举c的位置,那么每一次枚举中的方法数为 1~c-1 中(a,b)的个数 乘以 c~n中(c,d)的个数.累加起来即为答案. 1~c-1中(a,b)的个数相当于枚举b的位置,然后计算出b前面有多少数比A[b

[ACM] hdu 5147 Sequence II (树状数组,前缀和,后缀和)

Sequence II Problem Description Long long ago, there is a sequence A with length n. All numbers in this sequence is no smaller than 1 and no bigger than n, and all numbers are different in this sequence. Please calculate how many quad (a,b,c,d) satis

《程序设计技术》课程辅助学习资料

本文档提供课程相关的辅助学习资料. 阅读程序是提高程序设计水平的最为有效的方法,<程序设计技术>课程至少应该阅读后面提供链接博文中的基础部分.能够阅读完基础部分的博文,则可以给课程学习奠定一个坚实的基础. 自己编写程序也是学习编程必不可少的一个环节.自己编写是否正确可以通过OJ系统来验证.选做OJ的程序设计题方便于评价自己所写的程序是否正确.想要提高编写程序的能力并且达到更高的水平,从各个OJ中选做一些编程题是十分必要的. 文中提供了CCF-CSP认证考试历年 试题的第1题的题解.这些题解中都