46 lines
1.1 KiB
Markdown
46 lines
1.1 KiB
Markdown
##[$AcWing$ $795$ 前缀和](https://www.acwing.com/problem/content/797/)
|
||
|
||
### 一、题目描述
|
||
输入一个长度为 $n$ 的整数序列。
|
||
|
||
接下来再输入 $m$ 个询问,每个询问输入一对 $l,r$。
|
||
|
||
对于每个询问,输出原序列中从第 $l$ 个数到第 $r$ 个数的和。
|
||
|
||
**输入格式**
|
||
第一行包含两个整数 $n$ 和 $m$。
|
||
|
||
第二行包含 $n$ 个整数,表示整数数列。
|
||
|
||
接下来 $m$ 行,每行包含两个整数 $l$ 和 $r$,表示一个询问的区间范围。
|
||
|
||
**输出格式**
|
||
共 $m$ 行,每行输出一个询问的结果。
|
||
|
||
**数据范围**
|
||
$1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000$
|
||
|
||
### 二、实现代码
|
||
```cpp {.line-numbers}
|
||
#include <bits/stdc++.h>
|
||
|
||
using namespace std;
|
||
const int N = 100010;
|
||
int q[N];
|
||
int s[N];
|
||
// 一维前缀和
|
||
int main() {
|
||
int n, m;
|
||
cin >> n >> m;
|
||
for (int i = 1; i <= n; i++) {
|
||
cin >> q[i];
|
||
s[i] = s[i - 1] + q[i];
|
||
}
|
||
while (m--) {
|
||
int l, r;
|
||
cin >> l >> r;
|
||
printf("%d\n", s[r] - s[l - 1]);
|
||
}
|
||
return 0;
|
||
}
|
||
``` |