字首和演算法

2021-09-23 15:21:21 字數 1287 閱讀 6346

什麼是字首和和字首積?

字首和、字首積也稱字首和陣列,字首積陣列。

給一陣列a,

字首和:新建一陣列b,陣列中每一項b[i]儲存a中[0…i]的和;

字尾和:新建一陣列b,陣列中每一項b[i]儲存a中[i…n-1]的和;

字首積:新建一陣列b,陣列中每一項b[i]儲存a中[0…i]的積;

字尾積:新建一陣列b,陣列中每一項b[i]儲存a中[i…n-1]的積;

題目描述:

輸入n個數的數列,所有相鄰m數的和有n-m+

1個,求其中的最小值。

輸入格式:

第一行,n,m

第二行,有n個正整數

輸出格式:

輸出最小值

輸入樣例:63

10415

52輸出樣例:

10

這就是一道典型的通俗易懂的簡單的字首和求最小值的問題

首先我拿到題面,不看題解,直接硬剛(注意,這裡的**運用了多層巢狀並沒有使用字首和演算法,所以會比較冗雜,但是作為新手學思路也不失為一種可行的方法)

#include

#include

using namespace std;

intmain()

for(

int q=

1;q<=m;q++

) final=sum[1]

;for

(int i=

2;i<=n-m+

1;i++

) final=

(sum[i-1]

>=sum[i]

)?final=sum[i]

:final=final;

} cout<}return0;

}

接下來我將會利用「字首和演算法」來進行運算:

#include

using namespace std;

const

int inf=

0x3f3f3f

;int

main()

, sum[

1000];

int n, m;

cin>>n>>m;

for(

int i=

1; i<=n; i++

)int min=inf;

for(

int i=

0; i<=n-m; i++

) cout

}

字首和演算法

字首和是一種預處理,在之後的計算中直接應用前面已經算出的結果。題目鏈結 有數字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...

python字首 python字首和演算法

我試圖理解字首和概念背後的思想,看看codity here 蘑菇揀選器問題 在字首和課程中給出的例子 我的理解是,整個概念是基於乙個簡單的屬性,即為了求陣列a的兩個位置a pos left,pos right 之間的所有元素的和,使用第二個陣列p,其中所有元素都是連續求和的,其中搜尋到的和計算為 值...