題解 P3374 模板 樹狀陣列 1

2022-05-02 04:30:07 字數 594 閱讀 4828

最簡單的zkw線段樹就十分適合這道題,為什麼用zkw線段樹,可以看一下以下精簡**:

我們只需要用到單點修改,區間查詢就好了。

#include#define go(i,j,n,k) for(int i=j;i<=n;i+=k)

#define fo(i,j,n,k) for(int i=j;i>=n;i-=k)

#define mn 500010

#define ll long long

inline ll read()

while(ch>='0'&&ch<='9')return x*f;}

ll z[mn << 2], m, n, m;

inline void update(int rt)

inline void build()

inline ll query(int l,int r)return ans;}

int main()

}

不用數,只有19行(不強制換行),,,

為什麼這麼簡單?實測樹狀陣列1004ms,而zkw線段樹只有562ms:

text:lowbit

text:zkw

P3374 模板 樹狀陣列 1 題解

同步 原題鏈結 給定乙個長度為 n nn 的陣列,q qq 組操作 顯然,假設你現在什麼也不會。我們只考慮第 2 22 個操作,即先不考慮修改,如何處理區間和的詢問?顯然,對於初始的陣列 a ia i ai 只需要做乙個字首和 s ss 使得 s j i 1 ja is j sum j a i sj...

題解 P3374 模板 樹狀陣列 1

恩,這是ac的第一道樹狀陣列呢。如今終於找到了折中方案 樹狀陣列!量小,還支援修改!樹狀陣列也就是二叉索引樹,又被稱為fenwick樹,然而我個人認為它不能被嚴謹地成為樹,因為充其量只是借用的樹形結構的思想,於實現上有著較大的區別。樹狀陣列雖然運用範圍沒有線段樹那麼廣,但是它的效率要高很多,比如線段...

P3374 模板 樹狀陣列 1

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