資料結構 樹狀陣列 lost cows

2021-10-03 16:46:51 字數 982 閱讀 2241

這道題可以巧妙地利用二分和樹狀陣列在題目要求下完成以下操作:

1、找到序列中第k大的數;

2、修改乙個數.

這個操作一看需要平衡樹完成,這題利用樹狀陣列和二分完全可以.

題目:lost cows

做法:樹狀陣列+二分

1、倒序看身高,如果第 i

ii 頭牛可以看到 x

xx 頭牛,那麼它在剩下的 i

ii 頭牛中,它排 x+1

x+1x+

1.2 、對於身高 1

11 到 n

nn ,建立陣列a

ia_i

ai​, 初始為 1,被用到變為 0.用樹狀陣列維護該陣列字首和.

3、為了找到這個最小的 x+1

x+1x+

1 利用二分就可以做到.

**:

#include

#include

#include

#include

using

namespace std;

const

int n=

100010

;int a[n]

,n,ans[n]

;int c[n]

;int

lowbit

(int x)

void

add(

int x,

int y)

intsum

(int x)

intmain()

ans[i]

=r;add

(r,-1)

;}for(

int i=

1;i<=n;i++

)printf

("%d\n"

,ans[i]);

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 的線段樹,構建結果如下 在區間求和問題上,在葉子節點,顯然劃線部分的值可以由父親節點 左端葉子節點得到。那麼,這部分資訊就是冗餘的,沒有儲存的必要。同理,可以推導出所有冗餘的部分如下 那麼,去除冗餘部分後的結果如下 給每乙個節點乙個編號。我...