题目描述
输入n个数,有m次询问,每次询问后k个数的总和是多少。
输入格式
第一行一个整数n(1<=n<=100000)。
第二行包含n个数。
第三行一个整数m,表示有m次询问。(1<=m<=100000)
接下来m行,每行一个整数k(1<=m<=100000)。
输出格式
有m行,每行一个数字,代表一次询问的答案(不超过int范围)。
样例输入
5 1 2 3 4 5 2 2 4
样例输出
9 14
#答案_
#include<bits/stdc++.h>
using namespace std;
int a[101000], n, m, k;
long long s[101000];
int main() {
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d",&a[i]);
s[0] = 0; // 前0个数和为0
for (int i=1;i<=n;i++) {
s[i] = s[i-1] + a[i]; // 前i个数的和为前i-1个数的和+第i个数
}
scanf("%d",&m);
for (int i=1;i<=m;i++) {
scanf("%d",&k);
// 求的是后k个数的和,相当于第n-k+1个数到第n个数的和
printf("%lld\n", s[n] - s[n-k]);
// 前n个数和去掉前(n-k)个数和 剩下后k个数和
}
return 0;
}