P4735 最大异或和

题意:

一个非负序列a,初始长度为n,有两种操作:

  1. A x,在序列中添加x,n加一
  2. Q l r x,询问操作,询问一个位置p,p满足l<=p<=r,使得p到位置n的的异或和与x的异或值最大,输出最大值

题解:

我们来看这个查询操作,p∈[l,r],我们设整个区间的异或值为tot,
a[p]⊕a[p+1]⊕.....a[N]a[p] ⊕ a[p+1] ⊕ .....a[N]a[p]⊕a[p+1]⊕.....a[N]=tot⊕(a[1]⊕a[2].....⊕a[p−1])tot ⊕ (a[1] ⊕ a[2].....⊕a[p-1])tot⊕(a[1]⊕a[2].....⊕a[p−1])
相当于我们巧妙的将后缀问题转换成前缀问题,那就是找一个前缀s[y]⊕(x⊕tot)的值最大,y属于[l-1,r-1]。转化成可持久化01Trie经典模型:
给定(l,r,x),在序列[l,r]区间中选一个数a[i],使得a[i]⊕x最大
然后按照可持久化的套路,我们将所有前缀异或和s[i]建立可持久化01Trie,算出(x⊕tot)的值后在rt[l-2]到rt[r-1]这两颗树上走一边,寻找最大值

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
//Fe~Jozky
const ll INF_ll=1e18;
const int INF_int=0x3f3f3f3f;
inline ll read(){ll s=0,w=1ll;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1ll;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10ll+((ch-'0')*1ll),ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
void rd_txt(){#ifdef ONLINE_JUDGE#elsefreopen("in.txt","r",stdin);#endif
}
const int maxn=6e5+9;
struct tree{int cnt;int ch[2];
}tr[maxn*30];
int rtnum=0;
int a[maxn];
int rt[maxn];
int tot=0;
void insert(int now,int pre,int x){for(int i=30;i>=0;i--){int c=((x>>i)&1);tr[now].ch[c^1]=tr[pre].ch[c^1];tr[now].ch[c]=++rtnum;now=tr[now].ch[c];pre=tr[pre].ch[c];tr[now].cnt=tr[pre].cnt+1;}
}
int get(int L,int R,int x){int sum=0;for(int i=30;i>=0;i--){int c=((x>>i)&1);if(tr[tr[R].ch[c^1]].cnt>tr[tr[L].ch[c^1]].cnt){sum+=(1<<i);L=tr[L].ch[c^1];R=tr[R].ch[c^1]; }else {L=tr[L].ch[c];R=tr[R].ch[c]; }}return sum;
}int main()
{rd_txt();int n,m;cin>>n>>m;rt[0]=++rtnum;insert(rt[0],0,0);tot=0;for(int i=1;i<=n;i++){cin>>a[i];tot^=a[i];rt[i]=++rtnum;insert(rt[i],rt[i-1],tot);}for(int i=1;i<=m;i++){string op;cin>>op;int x;if(op=="A"){cin>>x;tot^=x;rt[++n]=++rtnum;insert(rt[n],rt[n-1],tot);}else if(op=="Q"){int l,r,x;cin>>l>>r>>x;l--;r--;if(l==0)printf("%d\n",get(0,rt[r],tot^x));else printf("%d\n",get(rt[l-1],rt[r],tot^x));}}return 0;
}

P4735 最大异或和相关推荐

  1. 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 ...

  2. 洛谷P4735 最大异或和

    题目链接 洛谷P4735 最大异或和 题目描述 给定一个非负整数序列 a{a}a,初始长度为nnn. 有 mmm 个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数 xxx,序列 ...

  3. P4735 最大异或和(可持久化字典树)

    题目链接:P4735 最大异或和 Description 给定一个非负整数序列 {a},初始长度为 N. 有   M个操作,有以下两种操作类型: 1 .A x:添加操作,表示在序列末尾添加一个数 x, ...

  4. luogu P4735 最大异或和

    背景: hehe...hehe...hehe... 题目传送门: https://www.luogu.org/problemnew/show/P4735 题意: 一个序列,支持两种操作加入一个元素xx ...

  5. P4735 最大异或和 01可持久化Trie树模板

    原题:https://www.luogu.org/problemnew/show/P4735 题解:观察一下式子,将a数组求一个异或前缀和,其实就是s[n]^x^s[p-1]的最大值 p∈[l,r], ...

  6. P4735 最大异或和(可持久化字典树 ? 主席树)

    异或满足可减性,所以可以维护前缀和,然后 a[p] xor a[p + 1] xor ... xor a[n] xor = s[p - 1] xor s[n] xor然后就只要维护s[].添加很好维护 ...

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

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

  8. [luogu] P4735 最大异或和

    link 先是转化题意. 因为在后面加入数,动态维护后缀 xor\text{xor}xor 明显麻烦,于是考虑转化成前缀和. 设 S[i]=S[i−1]⊕A[i]S[i]=S[i-1] ⊕ A[i]S ...

  9. [洛谷P4735]最大异或和

    题目大意:有一串初始长度为$n$的序列$a$,有两种操作: $A\;x:$在序列末尾加一个数$x$ $Q\;l\;r\;x:$找一个位置$p$,满足$l\leqslant p\leqslant r$, ...

最新文章

  1. leetcode之数组之和
  2. 跟着老王学python
  3. python输入字符串str_python字符串(str)
  4. 【WP8】线程安全的StorageHelper
  5. java内部类_Java内部类
  6. 1028: [JSOI2007]麻将 - BZOJ
  7. 闪客工具: 为你的flash firework photoshop做插件
  8. 孤城内,秋风秋雨抛荒了谁的一怀若水情思?
  9. 计算机管理员保密责任书,信息安全保密工作责任书
  10. OpenCV之图像伪彩色增强
  11. 外企重修课:商人高通、任性微软、老姜IBM
  12. 传智播客dos命令_命令行英雄,原始播客
  13. Set 接口实现类-HashSet
  14. Android广播静态注册失效
  15. 外显子名词解释_生物信息学常用名词解释(一)
  16. [转]齐善鸿:职业心智训练与管理教育
  17. 可变悬挂调节软硬_可变悬架软硬怎么调节高度
  18. json中的loads和dumps的区别及用法
  19. 计算机测控技术在线作业二答案,华东《计算机测控技术》2020年春季学期在线作业(二)答卷【标准答案】...
  20. Typecho反序列化漏洞分析

热门文章

  1. 这些让人看瞎了的设计!实力证明,谁才是世界的最终boss!
  2. 他是绝世天才,却只开了半辈子的挂!死后惨遭封号200年,这就是和牛顿抬杠的下场.........
  3. 当代大学查寝奇葩操作大赏 | 今日最佳
  4. 来自女朋友的灵魂拷问!| 今日最佳
  5. python代理charles_Mitmproxy + Python 做拦截代理
  6. qt4.7 mysql_详解Qt 4.7编译和访问Mysql驱动
  7. 输出毫秒_自学单片机第十三篇上:单点输出
  8. php return 变量,php内核笔记–函数返回变量return_value
  9. global.php,global.php
  10. python变量的作用_python 变量的作用范围