POJ 2985 並查集 樹狀陣列第K大

2021-09-26 09:43:45 字數 1220 閱讀 3518

poj 2985 【並查集+樹狀陣列第k大】

題目鏈結

題意:給你貓的編號1-n,m次操作,0操作可以把兩隻貓放到一組,1操作詢問貓的當前第k大組的容量是多少。

**思路:**首先0操作可以利用並查集的合併操作,用乙個size陣列紀錄組的容量,每次合併的時候就更新size,那麼查詢第k大用什麼來記錄呢?主席樹?不不不,今天要說的是樹狀陣列,樹狀陣列求第k大???

其實就是,利用樹狀陣列字首和單調性,可以二分或者利用倍增的原理實現

博主給了兩種求第k大的方法哦

///這個比較容易理解

else

l=mid+1;

}return ans;

}// int kth(int k)///樹狀陣列第k大板子

//

// return ans+1;

// }

} tree;

void

initt()

///記得初始化

tree.

add(

1,n)

;///開始的時候有n個1

}int

findd

(int x)

void

join

(int x,

int y)

}int

main()

else

}}

樹狀陣列求第k小 並查集 POJ 2985

樹狀陣列已經夠神奇了,原來它還可以求第k小的元素.orz,位運算v5!define n 1 20 int c n rank n fa n int n,m void init int i for i 1 i 0 i 把樹狀陣列的求和反向模擬,ans 1 n cnt c ans k ans 1 補充 樹...

POJ 2985(樹狀陣列 並查集 二分)

題目 這題考察了兩個點呢,組合並用到了並查集,求第k大的數用到了樹狀陣列,剛開始wa了幾次,發現是在組合並之後僅僅update 1 了一次,因為是刪除了兩個組增加了乙個組,應該是update 1 兩次,不細心啊。include include include using namespace std ...

線段樹 樹狀陣列 並查集

利用線段樹十分方便的處理區間,線段樹是一棵完美的二叉樹,樹上的每乙個節點都維護乙個區間,根維護的是整個區間,線段樹通常用來計算區間內資料的和或者是修改某處的值。對區間的操作可以再o logn 的時間內完成。下面我們通過 實現線段樹的構建,修改,區間求和。include include 線段樹 def...