截流法進行區間更新

2022-03-24 09:22:20 字數 1049 閱讀 4216

截流法進行區間更新,這種演算法在某些特定情況下很簡便,但是其侷限性也很明顯,針對各型別的題目酌情使用,之所以將其挑出來單獨寫一篇是因為其思想沒見過,很是新穎,所以在這裡值得一提。

演算法效能:在進行區間修改和單點修改時的演算法時間複雜度時都是 o(1),但是進行查詢時的時間複雜度是 o(n),對於這種情況,所以一般在進行查詢次數較少的情況下,選擇這種方法才可取。

參考題目:牛客--區間 (interval)

1 #include2 #include3 #include4

using

namespace

std;56

const

int maxn=1e6+10;7

intarr[maxn];89

void show(int

n)10

15 printf("\n"

);16}17

18int

main()

1931

show(n);

3233

while(m--)

3440

41for(int i=1;i<=n;++i)

4245 scanf("

%d%d

",&l,&r);

4647

show(n);

4849

for(int i=l;i<=r;++i)

5053 printf("

%lld\n

",ans);

5455

56return0;

57 }

/*in:

10 1

1 2 3 4 5 6 7 8 9 10

2 6 4

1 10

out:

10 1

1 2 3 4 5 6 7 8 9 10

1 1 1 1 1 1 1 1 1 1

2 6 4

1 5 1 1 1 1 -3 1 1 1

1 10

1 6 7 8 9 10 7 8 9 10

75*/

樹狀陣列 區間更新

樹狀陣列天生用來動態維護陣列字首和,其特點是每次更新乙個元素的值,查詢只能查陣列的字首和,但這個題目求的是某一區間的陣列和,而且要支援批量更新某一區間內元素的值,怎麼辦呢?實際上,還是可以把問題轉化為求陣列的字首和。首先,看更新操作update s,t,d 把區間a s a t 都增加d,我們引入乙...

線段樹區間更新

在此我們之前學習了線段樹的單點更新 點我 但是現在我們遇到乙個這樣的問題 給出乙個n個元素的陣列a1,a2,an。我們總共進行m次操作。每次操作為下列兩種操作其中一種 1 add l,r,v 將a l a l 1 a r 的值全部增加v。2 query l,r 計算子串行a l a l 1 a r ...

gfoj 區間更新模板

題目 如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 input 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m...