前缀和
来源:互联网 发布:淘宝直通车和百度竞价 编辑:程序博客网 时间:2024/04/28 03:06
前缀和模板
Problem Description:
给出一个含有n个整数的数列a,并且有m次询问,每次询问数列在区间[l,r]内的和,即求a[l]+a[l+1]+……+a[r]的值。
Input:
第一行为一个整数 T (1 ≤ T ≤ 50),表示共有T组输入数据;
对于每组数据,第一行是两个正整数 n,m (1 ≤ n ≤ 100000,1 ≤ m≤ 1000)分别代表数列长度和询问次数;
第二行行有 n 个正整数,第 i 个数表示数列元素 a[i] (1 ≤ a[i] ≤ 10^9)的值;
接下来 m 行,每行有两个正整数 l,r (1 ≤ l ≤ r ≤ n),代表询问内容。
Output:
每组数据输出 m 行,每行一个数为该次询问的区间和。
保证数据都在64位正整数范围内。
Sample Input
2
5 2
1 2 3 4 5
1 5
3 5
4 1
1 1 1 1
1 2
Sample Output
15
12
2
算法思路:就是sum[i]表示(a[0] + a[1] + a[2] + a[3] + a[4] + .. + a[i]).那么a[j]+a[j+1]+…+a[i] = sum[i] - sum[j-1] 在o(n)计算出 某段区间的和。
//// Created by luozujian on 17-11-1.////前缀和#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<vector>#include<queue>using namespace std;const int maxn = 1e5+5;int sum[maxn];int n,m;int main(){ int t; scanf("%d",&t); while(t--) { scanf("%d %d",&n,&m); memset(sum,0,sizeof(sum)); int x0; scanf("%d",&x0); sum[0] = 0; sum[1] += x0; for(int i=2;i<=n;i++) { scanf("%d",&x0); sum[i] += sum[i-1] + x0; } for(int i=0;i<m;i++) { int l,r; scanf("%d%d",&l,&r); printf("%d\n",sum[r] - sum[l-1]); } } return 0;}
//题目来自他们博客博客链接 谢谢!
阅读全文
0 0
- 前缀和
- 前缀和
- 前缀和
- 前缀和
- 前缀和
- 前缀和:区间和
- 前缀和后缀和
- 前缀++和后缀++
- 前缀和并行算法
- {前缀和}soj9564
- HDU1556 前缀和
- 前缀和--Openmp
- HDU3336前缀次数和
- hdu5327_Olympiad(数组前缀和)
- bzoj 1303 |前缀和
- hdu 5480(前缀和)
- mpi求前缀和
- 前缀和问题
- 作业
- Java的同步机制
- 整数运算、浮点运算与溢出
- SSH与SSM学习之Spring22——Spring事务之xml配置方式管理事务
- 常见正则表达式_1
- 前缀和
- bzoj4719 [Noip2016]天天爱跑步(树+lca+树上差分+思路题)
- Session机制详解
- 烦人的数组越界问题 解决攻略
- 数据分析与深度学习总结
- Java-11-package(包)
- 二叉树的顺序存储
- 将Sublime Text3 添加到鼠标右键
- 一道分治题