BZOJ 3261: 最大异或和
Description
一个序列,支持两个操作.
1.在序列尾加入一个数.
2.询问 [l,r] 中与 x 异或值最大的数.
\(n\leqslant 3*10^5\)
Sol
可持久化 Trie 树.
跟主席树一样建二进值 Trie 树.
异或就是尽量找不相同的就行.
Code
/**************************************************************
Problem: 3261
User: BeiYu
Language: C++
Result: Accepted
Time:4252 ms
Memory:172380 kb
****************************************************************/ #include<cstdio>
#include<iostream>
using namespace std;
#define N 600055
inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
inline char getop(char ch=getchar()){ while(ch>'Z'||ch<'A') ch=getchar();return ch; }
struct Trie{
int ch[N*24][2],s[N*24],cnt;
void insert(int pre,int &o,int val,int w){
if(!o) o=++cnt;s[o]=s[pre]+1;if(!w) return;
if(val&w) ch[o][0]=ch[pre][0],insert(ch[pre][1],ch[o][1],val,w>>1);
else ch[o][1]=ch[pre][1],insert(ch[pre][0],ch[o][0],val,w>>1);
}
int Query(int L,int R,int val,int res=0){
for(int k=1<<24,tmp;k;k>>=1){
if(tmp=!(val&k),s[ch[R][tmp]]-s[ch[L][tmp]]) res+=k,L=ch[L][tmp],R=ch[R][tmp];
else L=ch[L][!tmp],R=ch[R][!tmp];
}return res;
}
}t;
int rt[N];
int main(){
int n=in()+1,m=in(),x;t.insert(rt[0],rt[1],0,1<<24);
for(int i=2;i<=n;i++) x=x^in(),t.insert(rt[i-1],rt[i],x,1<<24);
for(;m--;){
char opt=getop();
if(opt=='A'){
x=x^in(),n++;t.insert(rt[n-1],rt[n],x,1<<24);
}else{
int l=in(),r=in(),v=x^in();printf("%d\n",t.Query(rt[l-1],rt[r],v));
}
}return 0;
}
BZOJ 3261: 最大异或和的更多相关文章
- BZOJ 3261: 最大异或和( 可持久化trie )
搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...
- bzoj 3261: 最大异或和 (可持久化trie树)
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Description 给定一个非负整数序列 {a},初始长度为 N. ...
- BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 3519 Solved: 1493[Submit][Status][Discu ...
- BZOJ 3261 最大异或和(算竞进阶习题)
可持久化Trie 需要知道一个异或的特点,和前缀和差不多 a[p] xor a[p+1] xor....xor a[n] xor x = a[p-1] xor a[n] xor x 所以我们把a[1. ...
- bzoj 3261 最大异或和 可持久化字典树(01树)
题目传送门 思路: 由异或的性质可得,题目要求的式子可以转化成求$max(pre[n]^x^pre[i])$,$pre[i]$表示前缀异或和,那么我们现在就要求出这个东西,所以用可持久化字典树来求,每 ...
- bzoj 3261 最大异或和【可持久化trie】
因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后 ...
- BZOJ 3261 最大异或和 (可持久化01Trie)
题目大意:让你维护一个序列,支持在序列末插入一个数,支持询问$[l,r]$区间内选择一个位置$p$,使$xor\sum_{i=p}^{n}a_{i}$最大 可持久化$01Trie$裸题,把 区间异或和 ...
- 可持久化+Trie || BZOJ 3261最大异或和 || Luogu P4735 最大异或和
题面:最大异或和 代码: #include<cstdio> #include<cstring> #include<iostream> using namespace ...
- bzoj 3261最大异或和
Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要 ...
随机推荐
- ST教学分析:相同行为连续数
转载自:http://zhidao.baidu.com/link?url=cm8k1RuA3fZ8FQCHYXXiY7xseVs5IJo63A8oq3FZwhSgaGNe4c2U2ZDpBToGYn5 ...
- ubuntu12.04中shell脚本无法使用source的原因及解决方法
现象: shell脚本中source aaa.sh时提示 source: not found 原因: ls -l `which sh` 提示/bin/sh -> dash 这说明是用dash来进 ...
- 解决某些Android Permission denied
最近遇到一个问题,总是在模拟器重报Permission denied错误,于是我直接在手机上测试,发现没有错误,于是很郁闷,反复在AndroidManifest中加入权限 <uses-per ...
- Sqoop2搭建及使用
1. 下载并安装配置Sqoop [需要的环境:Hadoop,Java] 首先 Hadoop版本2.7.2 20161013 找了篇Sqoop的文章就开撸 结果发现什么1.3,1.9,又有什么Sqo ...
- 奇虎360诉腾讯QQ垄断案之我见(3Q大战之我见)
这两款软件我都在用,要说时间最长感情最深的应该是腾讯QQ,1999年诞生的那年就在用QQ了! 不过感情归感情,个人看法归个人看法,不能用感情来判断. 正所谓外行看热闹,内行看门道.从事实上讲在使用这两 ...
- SharePoint中使用C#跳转页面的研究
最近开发SharePoint的时候遇到问题,不能完成跳转,于是归纳了一下方法(最后还是使用了js跳转,后台跳转被sharepoint限制了). 1.最常用的页面跳转(原窗口被替代):Response. ...
- 关于line-height
line-height不允许负值,给定值之后会根据font-size计算行高,line-height指定的行高是行高最小值,设置height可以增大行高 line-height的计算:以px为例,li ...
- 使用Shell创建GitHub仓库
Github的代码仓库分为2种类型: 用户自己的代码仓库 组织的代码仓库 下面就使用Shell脚本创建这2种类型的代码仓库,脚本如下 创建用户自己的代码仓库 #!/bin/bash USER_NAME ...
- Theano: CNMeM is disabled, CuDNN not available
Problem Theano: CNMeM is disabled, CuDNN not available Solution cnmem package: https://github.com/NV ...
- 使用css打造形形色色的形状!
使用css打造形形色色的形状! css是非常强大的工具,如果我们掌握的好,那么许多复杂的形状不需要使用图片而直接使用css完成即可,这不仅有利于减少http请求以增强性能还便于日后的管理和维护,一举两 ...