前缀和两种不同下标起始的写法:
为了不超界 有两种情况:
下标从0开始 那么前缀和数组si 表示i之前的所有数之和 sr+1 - sl
下标从1开始 那么前缀和数组si 表示包括i及其以前所有数之和 sr - sl-1
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int s[N];
int a[N];
int n, m;
int main(void) {
cin >> n >> m;
// 下标从0开始 si 代表i之前的数的和
/*
for (int i = 0; i < n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i - 1];
int l, r;
while (m--) {
cin >> l >> r;
// 由于输入是求第几个数到第几个数 输入是r 下标是idx = r-1 所以s[idx + 1] = s[r]
// 如果输入的是下标 应该是 s[r + 1] - s[l]
cout << s[r] - s[l - 1] << endl;
}*/
// 下标从1开始 si代表包括i和其之前所有数的和
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];
int l, r;
while (m--) {
cin >> l >> r;
cout << s[r] - s[l - 1] << endl;
}
}