ZZUOJ 10508 樹狀陣列

2021-09-02 23:56:43 字數 778 閱讀 7049

給定乙個序列,長度為n,每次詢問為一組區間[li,ri],輸出li到ri中出現恰好兩次的不同數的個數.

先對a離散化一下,當然也可以不離散化,用map也行。離線做,按右端點排序,從1遍歷到n,更新樹狀陣列和ans

對於a陣列,我們記錄上乙個和a[i]相等的位置last[i],更新樹狀陣列不太好想,具體看**

31

intn, m;

32int

a[maxn];

33int

last[maxn];

34int

pos[maxn];

35int

t[maxn];

36int

ans[maxn];

3738

struct

node

44}q[maxn];

4546

void add(int i, int

x) 49

50int sum(int

i) 55

56int

main()

68 sort(q, q +m);

69int index = 0

;70 rep(i, 1, n + 1

) 80}81

while (index < m && q[index].r ==i) 86}

87 rep(i, 0, m) printf("

%d\n

", ans[i]);

88return0;

89 }

ZZUOJ 10508 數列遊戲IV

題目鏈結 題目大意 給定乙個序列,長度為n,每次詢問為一組區間 li,ri 輸出li到ri 現恰好兩次的不同數的個數.n,m 2 10 5,序列中元素 10 9 解題思路 考慮用樹狀陣列解決 大概是一種型別的題目 樹狀陣列一般用來快速計算更新 logn 字首和,而對於本題來說,出現次數顯然不能單純隨...

樹狀陣列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 下...