題目:
這題考察了兩個點呢,組合並用到了並查集,求第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...