單點修改,區間查詢,模板題
#include
using
namespace std;
typedef
long
long ll;
const
int n =
1000010
;int n, q;
ll tr[n]
, a[n]
;int
lowbit
(int x)
void
add(
int x,
int v)
ll ask
(int x)
intmain()
while
(q --
)else
}return0;
}
我們只要看x就可以了,不需要考慮y。
因為,y是遞增的,同時x也是遞增的。
我們 在同一行時,記錄左側個數就得到當前等級。
而y時遞增的,所以,保證了,其他資料一定在自己同行或者下面。
兩者結合,我們就知道了,我們直接查詢,就得到的是左下方的星星數。
#include
using
namespace std;
const
int n =
1000010
;int n;
int tr[n]
;int cnt[n *2]
;int
lowbit
(int x)
void
add(
int x,
int v)
intask
(int x)
intmain()
for(
int i =
0; i < n; i ++
) cout << cnt[i]
<< endl;
return0;
}
資料結構 樹狀陣列
區間資訊的維護與查詢專題 樹狀陣列 1.問題 動態連續和查詢問題。給定乙個n個元素的陣列a1,a2,an,你的任務是設計乙個資料結構,支援以下兩種操作。add x,d 操作 讓ax增加d.query l,r 計算al al 1 ar.對普通陣列進行 一次修改或 特定區間 求和,時間複雜度為o n n...
資料結構 樹狀陣列
原陣列 字首和 範圍和 原陣列更改陣列元素在求和效率較低,引入樹狀陣列 假設原陣列a 樹狀陣列c 樹狀陣列 的三種操作 1.lowbit 子葉數 二進位制最低位的1代表多少 實現 int lowbit int n 求 lowbit x returnx x 2.update a i k 假設a i 是...
資料結構 樹狀陣列
講到了線段樹,那就順便講講樹狀陣列吧。假設乙個長度為 12 的線段樹,構建結果如下 在區間求和問題上,在葉子節點,顯然劃線部分的值可以由父親節點 左端葉子節點得到。那麼,這部分資訊就是冗餘的,沒有儲存的必要。同理,可以推導出所有冗餘的部分如下 那麼,去除冗餘部分後的結果如下 給每乙個節點乙個編號。我...