Description 给定一个长度为 \(n\) 的序列 \(A\),有 \(m\) 次操作,每次要么在序列尾部再添加一个数,将序列长度 \(n\) 加一,要么给进行一次查询,给定查询参数 \(l,~r,~x\) 要求在 \([l,~r]\) 内找一个位置 \(p\),要求最大化 \(x~~xor ~~Xor_{i = p}^{n} A_i\). Limitation \(1 \leq n,~m \leq 3 \times 10^5\) \(0 \leq A_i \leq 10^7\) Sol…
P4735 最大异或和 题目描述 给定一个非负整数序列\(\{a\}\),初始长度为\(N\). 有\(M\)个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数\(x\),序列的长度\(N+1\). Q l r x:询问操作,你需要找到一个位置\(p\),满足\(l \le p \le r\),使得: \(a[p] \oplus a[p+1] \oplus \cdots \oplus a[N] \oplus x\)最大,输出最大是多少. 输入输出格式 输入格式: 第一行包含…
Vasiliy's Multiset 题目链接: http://codeforces.com/contest/706/problem/D Description Author has gone out of the stories about Vasiliy, so here is just a formal task description. You are given q queries and a multiset A, initially containing only integer…
题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦反). 但是现在要支持在最末尾插入和区间查询,将这颗\(Trie\)可持久化一下就好了(可持久化\(Trie\)敲板) #include <cstdio> #include <cstring> #include <algorithm> using std::min; usi…
//tire的可持久化 //线段树的可持久化——主席树 //可持久化的前提:本身的拓扑结构在操作时不变 //可以存下来数据结构的所有历史版本 //核心思想:只记录每一个版本与前一个版本不一样的地方 // //s[i]=a[1]^a[2]^a[3]^...^a[n] //a[p]^a[p+1]^...a[N]^x=s[p-1]^s[N]^x //对于s[N]^x //从最高位开始考虑 //如果是1,那么就优先考虑是0的,如果有是0的,那么就把所有当前位为1的舍去,如果没有,再去考虑1的 //如果是…
题面:最大异或和 代码: #include<cstdio> #include<cstring> #include<iostream> using namespace std; ,maxm=maxn; ],rt[maxn<<],cnt=,X,L,R,ans; ]; ];}tr[maxn*]; inline void Insert(int u,int x,int a,int t){ )return; <<t))>; tr[x].son[!w]=…
嘟嘟嘟 省选竟然考了一个可持久化trie,就挑着我不会的考. 话说考场上我确实写了一个trie的做法,只不过一直没调出来然后就只剩暴力分了. 现在想想实在是太蠢了,明明对算法没有把握,却头脑一热在这题上刚了两个点,为什么就不先把第二题的暴力写写呢---------- 学过主席树,就觉得可持久化trie好像没什么了.大体思路和主席树一样,没有修改的结点直接继承老的结点,修改的就新开结点.所以空间复杂度还是\(O(nlogn)\)的. 对于这一题,我们先求出前缀异或和,然后令\(t = sum[N]…
给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求ALL 至 ARR 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值是多少?Input第1行:2个数N, Q中间用空格分隔,分别表示数组的长度及查询的数量(1 <= N <= 50000, 1 <= Q <= 50000). 第2 - N+1行:每行1个数,对应数组A的元素(0 <= Aii <= 10^9). 第N+2 - N+Q+1行:…
题目描述 给定一个非负整数序列 \(\{a\}\),初始长度为\(n\). 有 \(m\) 个操作,有以下两种操作类型: \(A\ x\):添加操作,表示在序列末尾添加一个数 \(x\),序列的长度 \(n+1\). \(Q\ l\ r\ x\):询问操作,你需要找到一个位置 \(p\),满足\(l \le p \le r\),使得: \(a[p] \oplus a[p+1] \oplus ... \oplus a[N] \oplus x\)最大,输出最大是多少. 输入格式 第一行包含两个整数…
学习了一下可持久化trie的有关姿势~其实还挺好理解的,代码也短小精悍.重点在于查询某个历史版本的trie树上的某条边是否存在,同样我们转化到维护前缀和来实现.同可持久化线段树一样,我们为了节省空间继承上一节点未修改的信息,修改的信息我们则新建一条链.节点上我们维护从最初的版本到当前版本这条路径一共出现了多少次,如果查询的最后版本记录这条路径出现的次数 > 查询的第一个版本的上一个版本的这条路径出现的次数,则说明这条路径存在在我们查询的范围内. 对于这道题来说,不大好处理的是查询是一段后缀,而后…