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...