区间最大异或和(异或的最小项)

本文主要介绍区间最大异或和(异或的最小项),下面一起看看区间最大异或和(异或的最小项)相关资讯。
话题表面
考虑到xor可以表示为前缀和,那么\(a[p]\ oplus a[p 1]\ oplus \ ldots \ oplus a[n]\ oplus x = s[p-1]\ oplus[n]\ oplus x \)。一切都是后来才知道的,所以可以取\(s[n]\oplus x\)的值在01-trie上匹配。注意还有一个对\(p\in[l-1,r-1]\)的限制。你可以使用持久trie查询第(r-1)个版本,然后在每个节点记录一个(las)来指示此时的最大值(l)
单击以查看代码# includesiostrem # inclucstiousingnamespace std;const int n=6e5 13,logn = 21int n,m,s[n],rt[n];struct trie{int ch[n*logn][2],cnt,las[n * logn];inline int insert(int num){ int now = rt[num-1],root= cnt,p = rootlas[p]= num;for(int i = 24;i = 0;- i){int c=(s[num](1i)?1 : 0);ch[p][c^1]=ch[now][c^1];ch[p][c]= cnt;p=cnt,now = ch[now][c];las[p]= num;}返回root}inline int query(int l,int r,int x){ int p = rt[r];int res = 0;如果(!r)返回x;for(int i = 24;i = 0;- i){int c=(x(1i)?1 : 0);if(ch[p][c^1]las[ch[p][c^1]]=l)p=ch[p][c^1],res =(1i);else p = ch[p][c];} return res} } t;int main{ scanf( % d % d ,n,m);for(int i = 1;i = n;i){ scanf( % d ,s[i]);s[i]^=s[i-1];rt[i]= t . insert(i);} while(m-){ char op;(同internationalorganizations)国际组织l,r,x;cinopif(op = = ;a ){ scanf( % d ,s[n]);s[n]^=s[n-1];rt[n]= t . insert(n);} else { scanf( %d%d%d,l,r,x);printf( % d \ n ,t.query(l-1,r-1,s[n]^x));} }返回0;}标签:
都是表达式
了解更多区间最大异或和(异或的最小项)相关内容请关注本站点。

三星i9100怎么刷rom,三星i9100怎样重新刷回官方版本ROM
苹果手机车载carplay怎么用百度地图(苹果手机车载carplay怎么用高德地图)
三星a5怎么样好用吗,三星a5手机好用吗
联想thinkpad 双屏(联想双屏幕笔记本)
windows10开机黑屏安全模式也进不去(win10黑屏进入安全模式后怎么办)
区间最大异或和(异或的最小项)
win10电脑浏览器字体乱码如何解决视频(win10浏览器字体乱码怎么解决方法)
苹果电脑以旧换新价格表官网2021(苹果笔记本电脑以旧换新官网有换成功的吗)
电脑怎么把字体调小一点(电脑怎么把字体设置大一些)
什么是将信息从其他计算机传递到用户计算机(在计算机内部用来传递)
重装系统后分辨率不对怎么办呀(重装系统后分辨率不正常)
字体放大软件下载安装(放大字体app)
电脑怎么组装台式电脑连线,自己组装电脑时硬盘和光驱应该怎么接线
苹果11pro有夜景模式吗(苹果11pro有夜景模式吗怎么开)
经常看一个人的抖音他会知道吗(经常看一个人的抖音他会知道吗怎么设置)
废纸价格最新报价,目前行情卖废纸多少钱一斤
4t仓库盘要分区吗,4t硬盘怎么分区
手机怎么彻底卸载root,手机怎么清除root状态啊求解
安卓手机软件安装包后缀名(安卓系统的软件安装包的后缀)
英雄联盟更新后无法登录(lol更新后登录不了)