bzoj3689 異或之 trie 堆

2021-07-07 11:11:58 字數 714 閱讀 9140

好多種解法,自己yy了一種二分答案+trie的做法,不過貌似還是o(nlog^2n)的,看了一下popoqqq大神的題解,發現可以用堆來做,先把每個位置的最小值放入堆裡,每次彈出乙個元素,假設這個元素是對應位置的第k小,那麼把對應位置的第k+1小放入堆中。

乙個巧妙的處理,因為會重複,所以取2*k次,只取奇數次的就可以了。

一開始要考慮自己的問題,所以每個位置的第二小值放入堆中。

#include#include#include#include#include#include#include#define maxn 4000010

using namespace std;

int ch[maxn][2],size[maxn];

int a[maxn];

int tot,n,m,k,mx;

struct yts

;struct cmp

};priority_queue,cmp> p;

void insert(int t)

return ans;

}int main()

for (int i=1;i<=n;i++) insert(a[i]);

for (int i=1;i<=n;i++)

for (int i=1;i<=2*k;i++)

printf("\n");

return 0;

}

BZOJ 3689 異或之 Trie樹 堆

題目鏈結 description 給定n個非負整數a 1 a 2 a n 對於每對 i,j 滿足1 i j n,得到乙個新的數a i xor a j 這樣共有n n 1 2個新的數。求這些數 不包含a i 中前k小的數。注 xor對應於pascal中的 xor c 中的 input 第一行2個正整數...

bzoj 3689 異或之 字典樹 堆

給定n個非負整數a 1 a 2 a n 對於每對 i,j 滿足1 i j n,得到乙個新的數a i xor a j 這樣共有n n 1 2個新的數。求這些數 不包含a i 中前k小的數。2 n 100000 1 k min 0 a i 2 31 先對所有數建一棵字典樹,對字典樹的每個節點記錄這個節點...

bzoj3689 異或之 字典樹 堆

給定n個非負整數a 1 a 2 a n 對於每對 i,j 滿足1 i j n,得到乙個新的數a i xor a j 這樣共有n n 1 2個新的數。求這些數 不包含a i 中前k小的數。注 xor對應於pascal中的 xor c 中的 對於100 的資料,2 n 100000 1 k min 0 ...