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

2021-06-28 20:06:25 字數 691 閱讀 3056

題目:

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

#include #include #include using namespace std;

#define max 200005

int n, m, g;

int father[max] = ; //father[i]表示i所在group的首腦

int member[max] = ; //member[i]表示以i為首的group有多少個member

int group[max] = ; //group[i]表示成員有[i-lowbit(i)+1, i]個的group有多少個,

inline int lowbit(int x)

void update(int x, int v)

}int sum(int x)

int query(int k)

return r;

}int find(int x)

void join(int x, int y)

void init()

int main()

} }return 0;

}

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

poj 2985 並查集 樹狀陣列第k大 題目鏈結 題意 給你貓的編號1 n,m次操作,0操作可以把兩隻貓放到一組,1操作詢問貓的當前第k大組的容量是多少。思路 首先0操作可以利用並查集的合併操作,用乙個size陣列紀錄組的容量,每次合併的時候就更新size,那麼查詢第k大用什麼來記錄呢?主席樹?不...

樹狀陣列求第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 補充 樹...

線段樹 樹狀陣列 並查集

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