1. 程式人生 > 其它 >演算法技巧0:字首和

演算法技巧0:字首和

技術標籤:演算法

什麼是字首和?字首和是一個數組的某項下標之前(包括此項元素)的所有陣列元素的和。

用來解決區間和的問題,即演算法算出的是一個一個的數,但是題目要求的是某個區間的和。

使用字首和,每次查詢的複雜度為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; }