背景:

hehe...hehe...hehe...

题目传送门:

https://www.luogu.org/problemnew/show/P4735

题意:

一个序列,支持两种操作加入一个元素xxx或给出l,r,xl,r,xl,r,x,询问在[l,r][l,r][l,r]中找到一个点ppp,使得ap⊕ap+1⊕ap+2⊕...⊕an⊕xa_p⊕a_{p+1}⊕a_{p+2}⊕...⊕a_{n}⊕xap​⊕ap+1​⊕ap+2​⊕...⊕an​⊕x最大,求这个的最大值。

思路:

back to summary\text{back to summary}back to summary.
异或的解决方法一般有线性基和01Trie\text{01Trie}01Trie。
这是一道动态的问题,需要动态的方式,当然是动态01Trie\text{01Trie}01Trie,即可持久化01Trie\text{01Trie}01Trie。
其实我们知道可持久化线段树(一种实现方式是主席树),运用类似的思想构建一棵可持久化01Trie\text{01Trie}01Trie。
我们可以求出异或前缀preipre_iprei​。
ap⊕ap+1⊕ap+2⊕...⊕an⊕xa_p⊕a_{p+1}⊕a_{p+2}⊕...⊕a_{n}⊕xap​⊕ap+1​⊕ap+2​⊕...⊕an​⊕x

=prep−1⊕pren⊕x=pre_{p-1}⊕pre_{n}⊕x=prep−1​⊕pren​⊕x

=prep−1⊕(pren⊕x)=pre_{p-1}⊕(pre_{n}⊕x)=prep−1​⊕(pren​⊕x)
而pren⊕xpre_{n}⊕xpren​⊕x是已知的,不妨设为SSS。
我们就转化成求S⊕prep−1S⊕pre_{p-1}S⊕prep−1​的最大值,其中p∈[l,r]p∈[l,r]p∈[l,r]。
这等价于求S⊕prepS⊕pre_{p}S⊕prep​的最大值,其中p∈[l−1,r−1]p∈[l-1,r-1]p∈[l−1,r−1]。
注意一下l=1l=1l=1(即l−1=0l-1=0l−1=0)时要特判一下。
还是递归版比较和谐。
over.\text{over.}over.

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;int root[20000000],tot[20000000],pre[600010];int tr[20000000][2];int n,m,len=0;
void insert(int now,int last,int t,int x)
{if(t<0) return;int tmp=(x>>t)&1;tr[now][tmp]=++len;tr[now][tmp^1]=tr[last][tmp^1];tot[tr[now][tmp]]=tot[tr[last][tmp]]+1;insert(tr[now][tmp],tr[last][tmp],t-1,x);
}
int query(int now,int last,int t,int x)
{if(t<0) return 0;int tmp=(x>>t)&1;if(tot[tr[now][tmp^1]]<tot[tr[last][tmp^1]]) return (1<<t)|query(tr[now][tmp^1],tr[last][tmp^1],t-1,x); else return query(tr[now][tmp],tr[last][tmp],t-1,x);
}
int main()
{int l,r,x;char s[5];scanf("%d %d",&n,&m);root[0]=++len;insert(root[0],0,25,0);for(int i=1;i<=n;i++){scanf("%d",&x);pre[i]=pre[i-1]^x;root[i]=++len;insert(root[i],root[i-1],25,pre[i]);}for(int i=1;i<=m;i++){scanf("%s",s+1);if(s[1]=='A'){scanf("%d",&x);n++;pre[n]=pre[n-1]^x;root[n]=++len;insert(root[n],root[n-1],25,pre[n]);}else{scanf("%d %d %d",&l,&r,&x);l--,r--;printf("%d\n",query(!l?0:root[l-1],root[r],25,x^pre[n]));}}
}

luogu P4735 最大异或和相关推荐

  1. [luogu] P4735 最大异或和

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

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

  3. P4735 最大异或和

    P4735 最大异或和 题意: 一个非负序列a,初始长度为n,有两种操作: A x,在序列中添加x,n加一 Q l r x,询问操作,询问一个位置p,p满足l<=p<=r,使得p到位置n的 ...

  4. 洛谷P4735 最大异或和

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

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

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

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

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

  7. Luogu P4735(可持久化字典树)

    链接:点击打开链接 题意: 给定一个非负整数序列 {a},初始长度为n. 有 m 个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 n+1. Q l r x:询 ...

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

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

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

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

最新文章

  1. redhat6.下安装配置hadoop环境--单实例版本
  2. boost::ratio_equal相关的测试程序
  3. 机器学习实战_09_树回归_源代码错误修正
  4. j2ee之原生AJAX
  5. shell基本运算符
  6. OPA 16 - how is mocked transaction types loaded in the runtime
  7. delete操作字符串会报错吗?
  8. 转录组拼接软件Trinity使用安装报错锦集
  9. cAdvisor的使用
  10. UVA - 10400 Game Show Math
  11. win7 计算机定时关机脚本,win7怎么定时关机?win7定时关机设置两种方法
  12. Youtube内容正在失控
  13. python爬虫公众号音频源代码_python爬取音频下载的示例代码
  14. FICO与MM的集成概述
  15. 《C专家编程》学习笔记
  16. html图片怎么做成链接,HTML的链接代码怎么做?HTML的图片链接怎么制作?
  17. 履带机器人动力总成_智能机器人在动力总成装配线中应用探讨
  18. Teamcenter云战略
  19. 何为数字化工厂?如何打造真正的数字化工厂?
  20. office Excel中的vlookup函数的使用

热门文章

  1. Ajax——判断用户名是否已经注册
  2. 管理学中常用的激励理论
  3. SSM中mybtis报错### The error may involve defaultParameterMap ### The error occurred while setting param
  4. java中Hashset集合删除元素_从Java中的HashSet中删除单个元素
  5. Windows系统封装(三)安装软件和系统优化清理。
  6. java pdf 图片替换_Java 添加、替换、删除PDF中的图片
  7. missing iso 9660 image the installer has tried to mount image #1
  8. Python Tox介绍和使用
  9. Openwrt MT7628/MT7620/MT7621——GPIO及LED/KEY的功能实现
  10. SpringCloud中Feign进行服务调用 java.io.IOException: too many bytes written 问题解决