摘要:
比较考验思维,考虑使用01trie先将数字建立trie,每次存在一下异或的结果。 对于异或出来的值,在01trie上贪心的找,如果能找到和他当前位相等的值时,判断一下他的子树中的数字是否满足前面所有的数都在 如果都在,说明答案要大,如果不在,说明就在当前子树 #include<bits/stdc++ 阅读全文
posted @ 2020-09-08 21:51
朝暮不思
阅读(185)
评论(0)
推荐(0)
摘要:
这个算法是因为借用了kruscal合并并查集集合维护连通性,并且重建树不破坏结构得名。 具体的思想是: 我们按照边权排序(本题从大到小排序) 我们在不断合并集合的同时,每次合并两个集合的祖先,都建立一个虚拟原点,使得这个点指向两个祖先,并且边权等于点权。这就是kruscal重构树,本质上是一个二叉堆 阅读全文
posted @ 2020-09-08 14:57
朝暮不思
阅读(201)
评论(0)
推荐(0)
摘要:
根据题目要求,首先最左边的情况直接维护即可。问题是如何知道何时最靠后。 一个朴素的想法是模拟这个过程,把这个数提到最前面,那么每次都对每个数查询一下在他前面的数量最多是多少。 这其实就是单点修改+区间查询,因此我们想到使用树状数组来维护。其实我们不用每次都对每个点查询。我们只需要对每次询问的点查一遍 阅读全文
posted @ 2020-09-08 10:10
朝暮不思
阅读(234)
评论(0)
推荐(0)

浙公网安备 33010602011771号