最簡單的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 ...