子段求和
描述
给定一个长度为n的数列a1,a2,…,an,共进行q次查询,每次求出从第i个元素到第j个元素的加和。
输入
第1行一个整数n,第2行为n个整数a1,…,an;第3行一个整数q,第4行开始的q行,每行2个数,代表每次查询的i和j。
输出
共q行,每行为一次查询的求和结果。
样例输入
5
1 3 7 9 -1
2
2 4
3 5
样例输出
19
15
数据范围
1 ≤ i ≤ j ≤ n ≤ 10^5
-10^5 ≤ ai ≤ 10^5
1 ≤ q ≤ 10^5
#include <iostream>
int main()
{
int n, q;
std::cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
std::cin >> a[i];
std::cin >> q;
while (q--)
{
int i, j;
std::cin >> i >> j;
int sum = 0;
for (int t = i - 1; t < j; t++)
sum += a[t];
std::cout << sum << '\n';
}
delete[]a;
return 0;
}
这很简单啊,要代码吗
普通的试一下
#include <iostream>
#include <vector>
using namespace std;
#define range 10
int main()
{
int n,q,i,j;
int a[range];
vector<int>v;
cin >> n;
for (int index = 0; index < n;index++)
{
cin >> a[index];
}
cin >> q;
for (int index = 0; index < q; index++)
{
cin >> i;
cin >> j;
int sum = 0;
for (int sum_i = i - 1; sum_i < j ; sum_i++)
{
sum = sum + a[sum_i];
}
v.push_back(sum);
}
for (vector<int>::iterator it = v.begin(); it != v.end(); it++)
{
cout << *it << endl;
}
}