正题

题目链接:https://www.luogu.com.cn/problem/P4735


题目大意

nnn个数字,有操作

  1. 在末尾加入一个数字xxx
  2. 询问[l,r][l,r][l,r]范围内的一个ppp使得ap⊕ap+1⊕ap+2...⊕an⊕xa_p\oplus a_{p+1}\oplus a_{p+2}...\oplus a_{n}\oplus xap​⊕ap+1​⊕ap+2​...⊕an​⊕x的值最大。

解题思路

定义sis_isi​表示前缀异或和,那么其实答案就是求一个在[l−1,r−1][l-1,r-1][l−1,r−1]中的一个sps_psp​使得sn⊕x⊕sps_n\oplus x\oplus s_psn​⊕x⊕sp​最大。
后面两个是固定的,考虑如何求sps_psp​,我们知道我们可以用TrieTrieTrie求静态的异或和最大,就是按照反方向路径行走。所以这里我们用类似于主席树的方法建立一颗可持久化TrieTrieTrie。

不同的是,我们对于每个节点要维护一个最大的上限lastlastlast(也就是这个节点的子树中包含的最后的插入的节点),这样询问时我们从rtrrt_rrtr​出发,避开last<llast<llast<l的节点就好了。

时间复杂度O(28n)O(28n)O(28n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5e5+10,W=28;
int n,m,cnt,a[N],rt[N];
int ch[N*40][2],last[N*40];
int Insert(int x,int k,int val,int id){int y=++cnt;if(k<0){last[y]=id;return y;}int c=(val>>k)&1;ch[y][c^1]=ch[x][c^1];ch[y][c]=Insert(ch[x][c],k-1,val,id);last[y]=max(last[ch[y][0]],last[ch[y][1]]);return y;
}
int Ask(int x,int k,int val,int lim){if(k<0)return last[x];int c=((val>>k)&1)^1;if(last[ch[x][c]]>=lim)return Ask(ch[x][c],k-1,val,lim);return Ask(ch[x][c^1],k-1,val,lim);
}
int main()
{scanf("%d%d",&n,&m);memset(last,-1,sizeof(last));rt[0]=Insert(0,W,0,0);for(int i=1;i<=n;i++){scanf("%d",&a[i]);a[i]^=a[i-1];rt[i]=Insert(rt[i-1],W,a[i],i);}while(m--){char op[4];int l,r,x;scanf("%s",op);if(op[0]=='Q'){scanf("%d%d%d",&l,&r,&x);l--;r--;int ans=Ask(rt[r],W,a[n]^x,l);printf("%d\n",a[n]^x^a[ans]);}else{scanf("%d",&a[++n]);a[n]^=a[n-1];rt[n]=Insert(rt[n-1],W,a[n],n);}}return 0;
}

P4735-最大异或和【可持久化Trie】相关推荐

  1. P4735 最大异或和 可持久化trie树

    可持久化01trie类似主席树思想    但是不支持版本差(也可以加一个siz 做差)    只能再维护一个左端点的最大值即可 #include<bits/stdc++.h> using ...

  2. 【bzoj3261】最大异或和 可持久化Trie树

    题目描述 给定一个非负整数序列 {a},初始长度为 N.        有M个操作,有以下两种操作类型: 1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1. 2.Q l r x: ...

  3. BZOJ3261: 最大异或和(可持久化trie树)

    题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...

  4. BZOJ 3261: 最大异或和 [可持久化Trie]

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1513  Solved: 657 [Submit][Status][Disc ...

  5. BZOJ.3261.最大异或和(可持久化Trie)

    题目链接 这个每次修改后缀好像很难搞,但是因为异或可以抵消,求sum[p~n]的最大值可以转化为求sum[1~n] xor sum[1~p-1]的最大值. \(p-1\in [l-1,r-1]\),用 ...

  6. BZOJ 3261 最大异或和 可持久化Trie树

    题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...

  7. P4592 [TJOI2018]异或 (可持久化Trie)

    [题目链接] https://www.luogu.org/problemnew/show/P4592 题目描述 现在有一颗以\(1\)为根节点的由\(n\)个节点组成的树,树上每个节点上都有一个权值\ ...

  8. P4735 最大异或和(可持久化trie树、求最大区间异或和)

    P4735 最大异或和 我们维护一个前缀异或和:s[i]=a[1]xora[2]xor-a[i−1]xora[i]s[i] = a[1] \ xor\ a[2]\ xor\ - a[i-1] \ xo ...

  9. Bzoj3261/洛谷P4735 最大异或和(可持久化Trie)

    题面 Bzoj 洛谷 题解 显然,如果让你查询整个数列的最大异或和,建一颗\(01Trie\),每给定一个\(p\),按照二进制后反方向跳就行了(比如当前二进制位为\(1\),则往\(0\)跳,反之亦 ...

  10. P4735 贪心 + 可持久化 Trie

    题意 传送门 P4735 最大异或和 题解 设 s[i+1]s[i+1]s[i+1] 为 a[0],a[1],⋯,a[i]a[0],a[1],\cdots,a[i]a[0],a[1],⋯,a[i] 的 ...

最新文章

  1. @RenderBody、@RenderSection、@RenderPage、Html.RenderPartial、Html.RenderAction的作用和区别...
  2. Struts2---入门
  3. 操作RadGrid1,RadAjaxLoadingPanel1不出现
  4. AGC026E - Synchronized Subsequence
  5. 中国工业企业数据库(1998-2014年)
  6. shell编程规范与变量
  7. 小马激活工具对比暴风激活工具
  8. 115网盘如何打开php文件格式,opensuse安装115网盘客户端
  9. android连接php还是asp,ASP或PHP如何判断是从电脑还是手机客户端访问页面的思路...
  10. 逆向工具Cutter
  11. ieTEST停止工作bug修复
  12. 惠普CEO李艾科的“金刚钻儿”
  13. Springboot 下载文件
  14. 生产力飙升!皮卡智能新产品上线,带你进入AIGC新纪元
  15. Up in the Air-3
  16. 宝塔面板 linux工具箱,宝塔面板教程大全–宝塔linux面板专业版数据同步插件使用教程...
  17. 英雄联盟手游显示服务器尚未开启什么意思,英雄联盟手游could not connect to the server是什么意思-could not解决办法[图文]-游戏窝...
  18. 全国公交接口 公交线路查询
  19. CCI指标在市场经济体制改革中,力挽狂澜的CCI指标
  20. ffmpeg录制系统声音

热门文章

  1. mock java_JAVA的mock工具mockito简介
  2. oracle 12c 多线程,Oracle 12c(12.1)中性能优化功能增强之通过参数THREADED_EXECTION使用多线程模型...
  3. python如何封装成可调用的库_Python实现打包成库供别的模块调用
  4. 解决浏览器存储问题,不得不了解的cookie,localStorage和sessionStorage
  5. java while do循环_c语言中,while 和 do while 循环的主要区别是( )
  6. [RabbitMQ]RabbitMQ概念_四大核心概念
  7. [Swagger2]SpringBoot集成Swagger
  8. 异步清零和同步置数/清零的区别
  9. 高等数学上-赵立军-北京大学出版社-题解-练习4.5
  10. 计算机操作系统第四章作业