摘要: 比较考验思维,考虑使用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)