演算法技巧0:字首和
阿新 • • 發佈:2020-12-15
技術標籤:演算法
什麼是字首和?字首和是一個數組的某項下標之前(包括此項元素)的所有陣列元素的和。
用來解決區間和的問題,即演算法算出的是一個一個的數,但是題目要求的是某個區間的和。
使用字首和,每次查詢的複雜度為O(1)
【一維字首和】
根據上面的定義,我們可以很容易得到 sum[i] = sum[i-1] + a[i] 這樣就可以得到前i個數的和
根據上述表示式我們可以以O(1)求出區間[i,j]的區間和 sum[i,j]=b[j]-b[i-1]
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[100005] = {0};
int b[100005] = {0};
int n;
cin >> n;
for (int i=1;i<=n;i++)
{
cin >> a[i];
b[i] = b[i-1] + a[i];
}
int t;
cin >> t;
while (t--)
{
int l,r;
int sum = 0;
cin >> l >> r;
sum = b[r] - b[l-1];
printf("%d\n",sum);
}
return 0;
}