樹狀陣列 Galahad

2022-05-10 02:36:24 字數 824 閱讀 8932

題意:求給定區間內不同數的和

經典例題

解題思路:

這兩天有點傻,emmm

離線操作

掃一遍陣列

對於重複的值樹狀陣列維護最靠近當前座標的那乙個,等同於把之前重複的元素刪掉。

這樣再對詢問進行字首和計算則只能計算到最靠近當前點的每個只出現一次的元素

不在區間的自然查詢不到,樹狀陣列快速求字首和記錄答案輸出即可

#include using namespace std;

typedef long long ll;

const int maxn = 1e6 + 100;

struct node

arr[maxn];

ll num[maxn] = , ans[maxn] = ;

bool cmp(node a, node b)

struct bit

bit(int n)

int lowbit(int x)

void update(int pos, ll val)

ll ask(int pos) };

int lst[maxn] = ;

int main()

sort(arr, arr + m, cmp);

int rp = 0;

for(int i = 1; i <= n && rp < m; ++i)

}

for(int i = 0; i < m; ++i)

cout << ans[i] << '\n';

return 0;

}

樹狀陣列1 樹狀陣列入門

仔細看一下,發現tree的每乙個節點的高度並不是隨意的,而是由它轉成二進位制之後末尾連續零的數量決定的,連續零的數量加1,就是高度,例如 3 11 零的數量為0,加1等於1,所以它的高度就是1 6 110 零的數量為1,加1等於2,所以它的高度就是2 8 1000 零的數量為3,加1等於4,所以它的...

樹狀陣列 瞎bb 樹狀陣列

樹狀陣列是乙個利用一維陣列和位運算組成的求解區間問題的高效資料結構,其構造如圖所示 首先,我們要用它解決單點修改 區間查詢的操作。根據這張圖我們建立乙個陣列bit,下標就是圖中顯示的十進位制數。bit i 就表示了圖中所示的一段區間的和,例如bit 6 sum 5,6 bit 4 sum 1,4 下...

樹狀陣列 二維樹狀陣列模板

樹狀陣列模板 int lowbit int x int add int x,int val int que int x 模板題 題解 include include include using namespace std int c 300000 rank 300000 int n int lowb...