【BZOJ】【3261】最大异或和】的更多相关文章

搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) ------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm> #include<cctype>   using namespace std;   #define b(x) (1…
3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MB Description       给定一个非负整数序列 {a},初始长度为 N.       有   M个操作,有以下两种操作类型: 1 .A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1.2 .Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得: a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多…
3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 3519  Solved: 1493[Submit][Status][Discuss] Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满足l<=p<=r,使得: a[p] xor a[p+1] xor ...…
Description 一个序列,支持两个操作. 1.在序列尾加入一个数. 2.询问 [l,r] 中与 x 异或值最大的数. \(n\leqslant 3*10^5\) Sol 可持久化 Trie 树. 跟主席树一样建二进值 Trie 树. 异或就是尽量找不相同的就行. Code /************************************************************** Problem: 3261 User: BeiYu Language: C++ Resul…
可持久化Trie 需要知道一个异或的特点,和前缀和差不多 a[p] xor a[p+1] xor....xor a[n] xor x = a[p-1] xor a[n] xor x 所以我们把a[1...n]的异或和预处理出来,用s[i]表示,用一个可持久化Trie维护 问题就转化成s[n] xor x = val,求一个序列与val异或的最大值 第i个Trie的root对应维护s[1..i],这样我们在查询值的时候为了保证在[...r-1]之类,只要查询r-1及之前的版本 为了保证在[l-1.…
题目传送门 思路: 由异或的性质可得,题目要求的式子可以转化成求$max(pre[n]^x^pre[i])$,$pre[i]$表示前缀异或和,那么我们现在就要求出这个东西,所以用可持久化字典树来求,每次贪心的往相反的方向看是否有值,具体看代码即可,模板题,注意最好先插入一个0,查询区间的$(l,r)$也要注意一下端点,记住我们要的是前缀. #include<bits/stdc++.h> #define clr(a,b) memset(a,b,sizeof(a)) typedef long lo…
因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后就是可持久化trie的板子了 #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; int n,m,a[N],b[N],rt[N],cnt; ]; struct qwe {…
题目大意:让你维护一个序列,支持在序列末插入一个数,支持询问$[l,r]$区间内选择一个位置$p$,使$xor\sum_{i=p}^{n}a_{i}$最大 可持久化$01Trie$裸题,把 区间异或和 转化为区间端点前缀异或和的异或值 即求$xsum_{n}\;xor\;max(xsum_{i})i\in[l-1,r-1]$的最大值 那么在可持久化$01Trie$里是$r-1$的$Trie$对$l-2$的$Trie$做差 需要先把$0$推入$Trie$里 #include <cmath> #i…
题面:最大异或和 代码: #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]=…
Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满足l<=p<=r,使得: a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少. Input 第一行包含两个整数 N  ,M,含义如问题描述所示.   第二行包含 N个非负整数,表示初始的序列 A . 接下来 M行,每行描述一个操作,…
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后就是使x^sum[n]^sum[p-1]最大 x^sum[n]为定值,于是用Trie树贪心就可以 考虑到l-1<=p-1<=r-1,我们不能对于每一个询问都建一棵Trie树,可是我们能够对于Trie数维护前缀和,建立可持久化Trie树 每一个区间[l,r]的Trie树为tree[r]-tree[l…
题意 给出一个长度为n的整数序列,给出m个操作.操作有两种.1,Ax表示在序列结尾增加x.2,Qlrx表示找到一个位置p满足 l<=p<=r,使得a[p] xor a[p+1]xor...xor a[n] xor x最大,并输出这个最大值. 分析 今天学可持久化字典树的时候的找的一道模板题.对于这个题目其实只要学过主席树应该都能自己写出来(我照着主席树的套路写然后debug一下午然后发现num数组想错了mmp) 我们定义sum[i]为a[1]xor a[2] xor ...xor a[i].那…
BZOJ 洛谷 \(Description\) 求所有区间和的异或和. \(n\leq 10^5,\ \sum a_i\leq 10^6\). \(Solution\) 这样的题还是要先考虑按位做. 记\(s_i\)表示前缀和(\(s_0\)=0).假设当前是第\(k\)位,我们要统计区间和在第\(k\)位为\(1\)的区间有多少个(或是奇偶性). 枚举区间右端点\(i\),然后我们要统计有多少个\(s_i-s_j\)在第\(k\)位为\(1\). 当\(s_i\)第\(k\)位为\(1\)时:…
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=5301 题面; 5301: [Cqoi2018]异或序列 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 476  Solved: 358[Submit][Status][Discuss] Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子…
题目描述:这里 可持久化字典树裸题,可以作为模板使用 首先介绍一下可持久化字典树 可持久化字典树,顾名思义,就是一种可持久化的数据结构,常用于处理异或问题 我们看一下题目,发现要求一个最大异或和,但是这个最大异或和很特殊,有一个区间的限制 首先,对于异或和问题,我们一般利用异或的前缀和性质,把一个区间的异或和变成两个值的异或 于是问题就转化为,在[l,r]区间内求一个位置y,使$sy^sn^x$值最大 然后分析一下,不难想到,对于一般的最大异或问题,我们可以用01trie解决 但是此题中有区间限…
蛤?这一年cqoi的题这么水???? 这不就是个sb莫队吗 这样写怕是会被打死,,, 注意\(a_x\ XOR a_{x+1}\ XOR\ ...\ a_{y}=s_{x-1}\ XOR\ s_y\),所以问题转化为两个数异或值为k的方案数 所以记录一下当前区间的值域和当前区间的答案就星了.. // It is made by XZZ #include<cstdio> #include<algorithm> #include<cmath> #define il inli…
5301: [Cqoi2018]异或序列 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 155[Submit][Status][Discuss] Description 已知一个长度为 n 的整数数列 a[1],a[2],…,a[n] ,给定查询参数 l.r ,问在 [l,r] 区间内,有多少连续子 序列满足异或和等于 k . 也就是说,对于所有的 x,y (l≤x≤y≤r),能够满足a[x]^a[x+1]^…^a[y]…
题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞了,考虑 DFS 序. 子树查询转成 DFS 序上一段区间,而链上查询转成两条链. 所以维护两(个?)种可持久化 01trie,一个按照 DFS 序,另一个按照从根到结点的路径. 还要求 LCA,这里我写了个倍增. #include <cstdio> inline int Max(int x, i…
题解 写完之后开始TTTTTTT--懵逼 这道题我们考虑一个东西叫容斥系数啊>< 这个是什么东西呢 也就是\(\sum_{i = 1}^{m}\binom{m}{i}f_{i} = [m = 1]\) 也就是说,我们求出m个系数,让这个式子只在[m = 1]的时候为1,其余时候为0 啥玩意啊怎么求啊 我们显然可以\(n^2\)的递推求出来,类似解方程 但是我们打个表就会发现是\(f_{i} = (-1)^{i - 1}(i - 1)!\) 然后我们再考虑这个式子的容斥意义,假如一个图有m个联通…
题目 神仙题啊神仙题 显然这个东西一脸不可求的样子啊,这种东西我们显然需要搞一个容斥什么的 于是设\(g_i\)表示至少存在\(i\)个联通块(联通块内部的边没有要求,联通块和联通块之间不存在边)的方案数,\(f_i\)表示恰有\(i\)个联通块 有 \[g_x=\sum_{i=x}^n\begin{Bmatrix}i\\x\end{Bmatrix}f_i\] 即我们对于那些联通块个数多于\(x\)个的情况,可以把这\(i\)个联通快分成\(k\)组,每一组作为一个新的"联通块",于是…
感谢: http://blog.sina.cn/dpool/blog/s/blog_76f6777d0101d0mr.html 的讲解(特别是2^(n-m)的说明). /************************************************************** Problem: 2844 User: idy002 Language: C++ Result: Accepted Time:308 ms Memory:2052 kb *****************…
题解:对每一位分别考虑贡献 先求前缀和 按照二进制减法分类讨论,求出最终这一位是1还是0 用树状数组维护 注意:树状数组对0这个位置单独考虑 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int u=1000000; const int maxn=100009; int n; int ans; int a[maxn]; inline int lowbit(…
如果你了解过 01 Trie 和 可持久化线段树(例如 : 主席树 ).那么就比较好去可持久化 Trie 可持久化 Trie 当 01 Trie 用的时候能很方便解决一些原本 01 Trie 不能解决的一些问题 01 Trie 的经典贪心算法可以在一个数集里面找出某个数和 X 异或的最值 但若数集不固定.变成了每次问询一段区间或者树上路径此时 01 Trie 便无法快速解决 这个时候需要使用可持久化的 Trie 来维护和进行查询操作.例如用前缀和建 Trie 就能方便查询某一区间的状况 可持久化…
可持久化Trie 嗯……同样搞个前缀异或和,然后将x与sum异或一下,就是在[l-1,r-1]中找x^sum的最大异或值了.同样可持久化Trie搞搞即可(模板还是没背全啊……sad /************************************************************** Problem: 3261 User: Tunix Language: C++ Result: Accepted Time:3888 ms Memory:239552 kb ********…
可持久化trie.又是%%%Xs酱... #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; #define REP(i,s,t) for(int i=s;i<=t;i++) #define dwn(i,s,t) for(int i=s;i>=t;i--) #define clr(x,c) memset(x,c…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
QAQ 以前一直觉得可持久化trie很难,今天强行写了一发觉得还是蛮简单的嘛 自己的模板是自己手写的,写了几道题目并没有出过错误 THUSC的第二题的解法五貌似就是可持久化trie,时间复杂度O(60*n*logn) 不过并没有正解优,听说考场上有人写可持久化树链剖分,也是6得不行QAQ 可持久化trie就是你每次插入一个单词的时候将原来trie的代码每次向下走的时候新建节点 把当前节点信息拷贝给新建节点,通常情况下还要额外对于trie的每个节点维护子树的信息 BZOJ 3261 也算是经典题目…
字典树 简介:字典树,又称单词查找树,Trie树,是一种树形结构,是哈希树的变种. 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较. 性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符: 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串: 每个节点的所有子节点包含的字符都不相同. 操作: 记trie[i][j]表示第i个节点的第j个儿子为哪个节点,tot为总的节点个数 插入: void insert() { int len = strlen(…
题目链接:BZOJ - 4103 题目分析 THUSC滚粗之后一直没有写这道题,从来没写过可持久化Trie,发现其实和可持久化线段树都是一样的.嗯,有些东西就是明白得太晚. 首先Orz ZYF-ZYF 神犇的题解. 题目给出的 n 和 m 的范围差别很大,n 很小,m 很大,因此可以想到 n 的范围是为了直接暴力枚举. 题目要求的就是 A 的一段区间中的数和 B 的一段区间中的数的异或的第 k 大值. 位运算有关的题目,一般是从高位到低位贪心之类的. 区间异或,一般要使用可持久化 Trie. 我…
题目链接  BZOJ 4568 考虑树链剖分+线段树维护每一段区域的异或线性基 对于每个询问,求出该点集的异或线性基.然后求一下这个线性基里面能异或出的最大值即可. #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i) #define dec(i, a, b) for (int i(a); i >= (b); --i) #define ls i…