本人水平有限,題解不到為處,請多多諒解
本蒟蒻謝謝大家**
題目:time limit: 10 sec memory limit: 512 mb
submit: 231 solved: 78
[submit][status][web board]
給定數列
a[1],a[2],…,a[n],你需要依次進行 q個操作,操作有兩類:
1 i x:給定 i,x將 a[i]加上 x;
2 l r:給定 l,r,求a[l]+a[l+1]+?+a[r] 的值)。
第一行包含 2 個正整數 n,q,表示數列長度和詢問個數。保證 1≤n,q≤10^6 。
第二行 n 個整數a[1],a[2],…,a[n],表示初始數列。保證 ∣a[i]∣≤10^6
接下來 q 行,每行乙個操作,為以下兩種之一:
1 i x:給定 i,x,將 a[i] 加上 x;
2 l r:給定 l,r,
保證 1≤l≤r≤n∣x∣≤10^6
對於每個 2 l r 操作輸出一行,每行有乙個整數,表示所求的結果。
3 21 2 3
1 2 0
2 1 3
6
模板樹狀陣列
code:
#include#pragma gcc optimize(3)using
namespace
std;
typedef
long
long
ll;const
int maxn=1e6+5
;int
n,q;
ll c[maxn];
inline
intread()
while(isdigit(ch))
return x*f;
}int lowbit(int
x)void add(int x,int w)//
在x位置加上w
}ll
get(int x)//
求區間a[1~x]的和return sum(r)-sum(l-1)
return
cnt;
}int
main()
return0;
}
樹狀陣列 單點修改區間查詢
樹狀陣列,時間複雜度o mlogn 明顯優於暴力列舉以及字首和,主要用於單點修改區間查詢 當然還有區間修改單點查詢 如果一道題中只有區間查詢,那麼建議使用字首和維護 思想直接理解不好理解,借助資料 a陣列下標12 3456 78數值2 5632 714以上是我們要儲存的a陣列,就是原資料 b陣列下標...
樹狀陣列(單點修改區間查詢)
lowbit是用來取出二進位制中最低位數的1所代表的二進位制的值。只需要記下 就行了 int lowbit int x 將乙個樹的最子節點修改,則其父節點也需要更改,父父節點也需要修改。x x lowbit x 就是用來取出其父節點的。void add int x,int k 能查詢原陣列的字首和,...
樹狀陣列 1 單點修改,區間查詢
這是一道模板題。給定數列 a 1 a 2 a n 你需要依次進行 q 個操作,操作有兩類 1 i x 給定 i,x,將 a i 加上 x 2 l r 給定 l,r,求 ri la i 的值 換言之,求 a l a l 1 a r 的值 第一行包含 2 個正整數 n,q,表示數列長度和詢問個數。保證 ...