怎么办?很急,在线等

子段求和
描述

给定一个长度为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;
    }
}

img