區間問題

區間和

給一個長度為n的陣列a,

每次詢問\(a_l+a_{l+1}...a_r\)的值

考慮\(p_i\)為\(a_1...a_i\)的和

對於\(a_l...a_r\)的和

可以表示成\(p_r - p_{l - 1}\)

前綴和

區間加值

有q筆操作,每次操作可表示為l, r, v

帶表對於\(a_l...a_r\)每一個值都加上v

 

在q筆操作後,輸出a陣列

差分陣列

對於一個差分陣列d

定義\(d_i = a_i - a_{i - 1}\)

\(d_1 = a_1\)

 

可以知道\(a_i = d_1...d_i的和\)

差分陣列

所以如果把\(d_l\)加上v

就相當於把\(a_l到a_n都加上v\)

 

接著再把\(d_{r+1}\)減掉v

相當於把\(a_{r+1}到a_n都減掉v\)

這樣就能夠把\(a_l到a_r\)都加上v

 

最後在對差分陣列做一次前綴和就好了

區間問題

By scottchou

區間問題

  • 92