摘要: 原题链接 Trie+位运算+前缀和思想+后缀和思想 错误思路: 如果枚举两个端点,结果还是会TLE,就算先预处理每个sum[i]对应异或的最大值,排序,考虑到最坏情况结果时间复杂度还是会到10的10次方,因此此解不可行 正确思路: 本道题要求两个区间内的异或最大值,我们可以用一个数组ans[i]记录 阅读全文
posted @ 2021-01-02 19:41 acmloser 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 原题链接 Trie+位运算 和前面差不多的题,但是注意一下i、j、k都是不同的,在找异或最大值的时候要把i、j从树上删除,枚举完后再加回来 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace 阅读全文
posted @ 2021-01-02 19:25 acmloser 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 原题链接 Trie+位运算 和前面题一样标记下删除的路径即可 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 const int N = 200010; 6 int idx 阅读全文
posted @ 2021-01-02 19:23 acmloser 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 原题链接 想在vj上做来着..结果vj半天登不上去... 错误思路: 暴力枚举TLE 错误思路2: 用cnt数组标记用了的数字,但注意如果我们只标记叶子结点,那么就会陷入死循环,因为每次都要走到底才能知道是否能用 正确思路: 用cnt数组标记当前结点的子节点的个数,因为可能存在重复数字,所以不能简单 阅读全文
posted @ 2021-01-02 11:03 acmloser 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 原题链接 考察:Trie+位运算 错误思路1: 枚举端点异或,这样肯定TLE 错误思路2: 利用前缀和思想,区间[i,j]内异或 = sum[i-1]^sum[j],将所有sum值插入树中枚举一个点,另一个利用之前的sum xor的思想,但是这样是错的,我们要取sum的下标,但数据量大的时候存在相同 阅读全文
posted @ 2021-01-02 09:01 acmloser 阅读(155) 评论(0) 推荐(0) 编辑