演算法筆記 字首和

2021-10-01 23:58:09 字數 1193 閱讀 8011

字首和是一種重要的預處理,能大大降低查詢的時間複雜度。

字首和中最簡單的題目就是:

給定 n 個數和 m 次詢問,每次詢問一段區間的和。

如果不使用字首和,我們就需要每次詢問一次,我們就需要把這一段區間的數字相加,這時候題目的複雜度就是o(n * m)的複雜度,一旦題目資料給大了,就》很容易導致程式超時,這時候我們就需要使用更加優化的來減少它的用時。,如》果這時候我們使用字首和就可以把o(n * m)複雜度的題目優化為o(m+n)的複雜度,大大優化了時間,所以我們需要掌握這種優化的方法。

查詢乙個區間的和我們可以從加法轉換為減法,我們查詢從l到r這個區間裡面的數字的和,我們其實可以轉換為前r項之和減去前(l-1)項之和,得到的還是l到r這個區間的和。所以我們就可以優化為

sum[0]

=0;for

(i=1

;i<=n;i++

)

通過這麼乙個式子,我們可以把前每 i 項和儲存到sum這個陣列,當我們需要求l到r區間的時候,我們就只需要把sum [ r ]-sum [ l -1 ] 求出來就可以了,不需要在使用for把每一位都重新相加起來。這就大大簡化了時間複雜度,這就是字首和的基本思路

數圈圈

送分了qaq

珂朵莉與宇宙

數學考試

run

區間權值

kuangyeye and hamburgers

這些題目都考察了字首和的知識點,其實字首和更像是一種優化的方法,就像二分,差分一樣,使用這些可以大大簡化程式的計算時間,我們要學會靈活的使用這些優化策略,因為單純考察字首和的題目基本不會出現什麼,我們的題目一般都是與其他演算法相結合,並且想讓你優化時間的時候可以會需要使用到字首和這一演算法,總而言之掌握字首和這種思路還是非常重要的

字首和演算法

什麼是字首和和字首積?字首和 字首積也稱字首和陣列,字首積陣列。給一陣列a,字首和 新建一陣列b,陣列中每一項b i 儲存a中 0 i 的和 字尾和 新建一陣列b,陣列中每一項b i 儲存a中 i n 1 的和 字首積 新建一陣列b,陣列中每一項b i 儲存a中 0 i 的積 字尾積 新建一陣列b,...

字首和演算法

字首和是一種預處理,在之後的計算中直接應用前面已經算出的結果。題目鏈結 有數字1 n,然後m個l,r查詢,構造乙個序列,使得查詢的區間和的和最大值 輸出和。思路 差分字首和求出每個數字被查詢的次數,然後sort排序,一次賦值n到1,最大的對應n include include include inc...

字首和演算法

例如 給定乙個陣列求某一區間 下標x到x y上 所有數字相加和為0,求這樣區間存在的個數 求某個區間上所有數相加為1這樣區間的個數 include using namespace std typedef long long ll define int ll map int,int mp void s...