
前缀和算法能快速求出某一个区间内所有元素的和
1 预处理出来一个前缀和数组dp
dp[i] = dp[i-1]+v[i] (v数组由输入的数字组成),即区间[1,i]的所有元素的和=区间[1,i-1]所有元素的和+v数组中i下标的元素

2 使用前缀和数组
求[l,r]这段连续区间的和,即dp[r] -dp[l-1]

- int main()
- {
- //1 读入数据
- int n = 0;
- int q = 0;
- cin >> n >> q;
- vector<int> v(n + 1);
- for (int i = 1; i <= n; i++)
- {
- cin >> v[i];
- }
-
- //2 预处理出来一个前缀和数组
- vector<long long> dp(n + 1);//防止溢出
- for (int i = 1; i <= n; i++)
- {
- dp[i] = dp[i - 1] + v[i];
- }
-
- // 3 使用前缀和数组
- int l = 0;
- int r = 0;
- while (q--)
- {
- cin >> l >> r;
- cout << dp[r] - dp[l - 1] << endl;
- }
- return 0;
- }