P3368 模板 樹狀陣列 2 題解

2021-10-07 13:26:30 字數 1247 閱讀 5263

同步

原題鏈結

前置知識:

樹狀陣列的單點修改與區間詢問。

簡要題意:維護陣列的區間修改與單點詢問。

同樣類似的,我們用樹狀陣列進行操作,對每個區間修改,本質上是對差分陣列的字首和的維護,而字首和的維護我們需要用到樹狀陣列

樹狀陣列以常數小,空間小比線段樹好用,好寫(但是功能沒有線段樹多)。

所以對每個區間 [l,

r]

[l,r]

[l,r

] ,更新 l

ll 和 r+1

r+1r+

1 的差分值即可。

時間複雜度:o(n

log⁡n)

−o

(log⁡n

)\mathcal(n \log n) - \mathcal(\log n)

o(nlogn)

−o(logn)

.實際得分:100pt

s100pts

100pts

.

#pragma gcc optimize(2)

#include

using

namespace std;

const

int n=

1e6+1;

typedef

long

long ll;

inline

intread()

int x=0;

while

(ch>=

'0'&& ch<=

'9') x=

(x<<3)

+(x<<1)

+ch-

'0',ch=

getchar()

;return x*f;

}int a[n]

; ll c[n]

;int n,m,x,y;

inline

intlowbit

(int x)

inline ll sum

(int x)

return s;

}inline

void

update

(int x,

int k)

}int

main()

while

(m--

)else

}return0;

}

P3368 模板 樹狀陣列 2 題解

csdn同步 原題鏈結 前置知識 樹狀陣列的單點修改與區間詢問。簡要題意 維護陣列的區間修改與單點詢問。同樣類似的,我們用樹狀陣列進行操作,對每個區間修改,本質上是對差分陣列的字首和的維護,而字首和的維護我們需要用到樹狀陣列。樹狀陣列以常數小,空間小比線段樹好用,好寫 但是功能沒有線段樹多 所以對每...

P3368 模板 樹狀陣列 2

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

P3368 模板 樹狀陣列 2

題目傳送門 p3368 模板 樹狀陣列 2 給你乙個長度為n的陣列 操作 1 格式 1 x y k 含義 將區間 x,y x,y x,y 內每個數加上 kkk 操作 2 格式 2 x 含義 輸出第 x xx 個數的值。區間更新,單點查詢的樹狀陣列 include include include in...