【BZOJ3689】异或之 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对应于 ...
分类:
其他好文 时间:
2017-06-28 11:02:12
阅读次数:
228
我们需要知道一个事实,trie树上是可以要求第k大的!我们每个节点记个size值然后像其他数据结构一样维护就可以了然后我们再搞个priority_queue什么的就好了,注意每个值会出现两次只要记一次 1 /*********************************************....
分类:
其他好文 时间:
2015-03-20 23:36:29
阅读次数:
164
题解:首先知道一点trie不仅可以求与某个数异或的最大值.最小值,还能求第k大值,不能再神,orz!!!多添加一个size域即可。然后本题做法类似于超级钢琴。我们先求出每个a[i]的第二异或最小值,然后放进堆里(第一是和自己)然后我们往外取最小值,每次取出一个之后a[i]的第k小异或值就压入a[i]...
分类:
其他好文 时间:
2014-12-20 22:04:02
阅读次数:
261
题目大意:给定n个非负整数A[1], A[2], ……, A[n]。
对于每对(i, j)满足1
注:xor对应于pascal中的“xor”,C++中的“^”。
思路:同NOI2010超级钢琴。http://blog.csdn.net/wyfcyx_forever/article/details/40400327
我们只需一开始在全局堆中放进去每个数和他之后的数异或的最小值,然后...
分类:
其他好文 时间:
2014-10-23 17:44:51
阅读次数:
238
题目大意:给定n个数,求这n个数两两异或的值中的前k小
首先我们对所有数字建立二进制Trie树,可以利用Trie树上的size域查询出一个数与其它数异或值的第k小
然后我们维护一个堆,将所有数与其它异或值的第2小加入堆(第一小是自己异或自己,不在题目要求范围内),当取出一个数异或值的第k小后,将第k+1小加入堆
一个异或值会被两个数分别取出一次,所以取出奇数次时输出,取2*k次即可
时间复...
分类:
其他好文 时间:
2014-10-11 15:27:51
阅读次数:
190