题目大意:给定一个序列,提供下列操作:

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

注意0要插入一个数字0。所以把-1作为空节点。然后把数组向前推进一位就可以

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 600600
using namespace std;
struct Trie{int cnt;Trie *son[2];
}*tree[M],node[14000000];
int n,m,tot,sum[M];
inline int getc() {static const int L = 1 << 15;static char buf[L], *S = buf, *T = buf;if (S == T) {T = (S = buf) + fread(buf, 1, L, stdin);if (S == T)return EOF;}return *S++;
}
inline int getint() {int c;while(!isdigit(c = getc()));int tmp = c - '0';while(isdigit(c = getc()))tmp = (tmp << 1) + (tmp << 3) + c - '0';return tmp;
}
inline int getch() {int c;while((c = getc()) != 'A' && c != 'Q');return c;
}
inline Trie* New_Node(int _,Trie*__,Trie*___)
{node[tot].cnt=_;node[tot].son[0]=__;node[tot].son[1]=___;return &node[tot++];
}
Trie* Build_Tree(Trie *p,int x,int pos)
{if(!pos)return New_Node(p->cnt+1,tree[0],tree[0]);if( (x&pos)==0 )return New_Node(p->cnt+1,Build_Tree(p->son[0],x,pos>>1),p->son[1]);elsereturn New_Node(p->cnt+1,p->son[0],Build_Tree(p->son[1],x,pos>>1));
}
int Get_Ans(Trie *l,Trie *r,int x,int pos)
{int num=x&pos?

1:0; if(!pos) return 0; if(r->son[!num]->cnt-l->son[!num]->cnt) return pos + Get_Ans(l->son[!num],r->son[!num],x,pos>>1); else return Get_Ans(l->son[num],r->son[num],x,pos>>1); } int main() { int i,x,l,r; char p[10]; tree[0]=New_Node(0,0x0,0x0); tree[0]->son[0]=tree[0]->son[1]=tree[0]; tree[1]=Build_Tree(tree[0],0,1<<25); cin>>n>>m; for(i=1;i<=n;i++) { x=getint(); sum[i]=sum[i-1]^x; tree[i+1]=Build_Tree(tree[i],sum[i],1<<25); } for(i=1;i<=m;i++) { p[0]=getch(); if(p[0]=='A') { x=getint(); sum[n+1]=sum[n]^x; tree[n+2]=Build_Tree(tree[n+1],sum[n+1],1<<25); ++n; } else { l=getint(); r=getint(); x=getint(); x^=sum[n];--l;--r; printf("%d\n", Get_Ans(tree[l],tree[r+1],x,1<<25) ); } } }

BZOJ 3261 最大异或和 可持久化Trie树相关推荐

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

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

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

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

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

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

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

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

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

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

  6. BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 3519  Solved: 1493 [Submit][Status][Dis ...

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

  8. BZOJ3261 最大异或和 解题报告(可持久化Trie树)

    本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类 ...

  9. BZOJ #3166. [Heoi2013]Alo(可持久化trie树+set)

    #3166. [Heoi2013]Alo description solution code BZOJ3166 description Welcome to ALO ( Arithmetic and ...

最新文章

  1. vue-自主研发非父子关系组件之间通信的问题
  2. Java工具类--Map集合与Java对象相互转换
  3. Android基础控件ProgressBar进度条的使用
  4. NIFI工作流备份和恢复
  5. 【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)
  6. 【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?
  7. 【ENVI二次开发】关于批处理(Batch)模式与ENVI_DOIT的使用
  8. 沃尔玛痛失世界最大零售商 电商凶猛!
  9. 熊猫支持html5么,Steam疯狂周三特惠推荐:你给我看大熊猫,我就给你钱
  10. 如何在Vue中使用websocket?
  11. Oracle查询执行计划
  12. 2个74151实现16位数据选择器以及在Multisim的演示
  13. meltdown linux检测,如何检查你的Linux PC是否受Meltdown和Spectre安全缺陷影响
  14. 转载:软件工程师的视角看网络(网络那点事)
  15. 【概率论与数理统计(研究生课程)】知识点总结4(随机变量的数字特征)
  16. 东方航空移动信息化专家路耄:东航的移动互联。
  17. Teach yourself Programing in Ten Years(翻译+原文链接)
  18. 如何用不到200行代码实现经典小游戏贪吃蛇,附源代码及详细实现思路
  19. 隐私计算头条周刊(10.16-10.22)
  20. bizhubc226说明书_柯尼卡美能达复印机C226|C266扫描功能设置

热门文章

  1. .net中下载文件的方法(转)
  2. SQL Server 高级操作 视图和存储过程
  3. 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
  4. IDC机房:运营商机房与第三方机房(昌平机房)优劣对比
  5. .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
  6. 深度数据包检测DPI开发解析
  7. SpringBoot使用教程【1】Restful API设计 返回json,xml格式...
  8. Windows8.1+Eclipse搭建Hadoop2.7.2本地模式开发环境
  9. Compressive sensing
  10. alibaba面试题