题目大意:让你维护一个序列,支持在序列末插入一个数,支持询问$[l,r]$区间内选择一个位置$p$,使$xor\sum_{i=p}^{n}a_{i}$最大

可持久化$01Trie$裸题,把 区间异或和 转化为区间端点前缀异或和的异或值

即求$xsum_{n}\;xor\;max(xsum_{i})i\in[l-1,r-1]$的最大值

那么在可持久化$01Trie$里是$r-1$的$Trie$对$l-2$的$Trie$做差

需要先把$0$推入$Trie$里

 #include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 600100
#define N2 16000100
#define MM 100
#define ll long long
#define dd double
#define uint unsigned int
#define mod 1000000007
#define idx(X) (X-'a')
using namespace std; int gint()
{
int ret=,fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
int bin[];
struct Trie{
int ch[N2][],root[N1],num[N2],tot;
void init(){
tot=;int x=;root[]=;
for(int i=;i>=;i--)
ch[x][]=++tot,x=ch[x][],num[x]=;
}
void insert(uint s,int id,int w)
{
int p,x,y;
root[id]=++tot;
x=root[id],y=root[id-];
for(int i=;i>=;i--){
p=(s&bin[i])?:;
ch[x][p]=++tot;
ch[x][p^]=ch[y][p^];
x=ch[x][p],y=ch[y][p];
num[x]=num[y]+w;
}
}
uint query(int l,int r,uint s)
{
int x,y,sx,sy,p;uint ans=;
y=l<?:root[l],x=root[r];
for(int i=;i>=;i--){
p=(s&bin[i])?:;
if(num[ch[x][p^]]-num[ch[y][p^]]>){
x=ch[x][p^],y=ch[y][p^];
ans|=bin[i];
}else if(num[ch[x][p]]-num[ch[y][p]]>){
x=ch[x][p],y=ch[y][p];
}else break;
}return ans;
}
}T;
int n,m;
uint a[N1],pa[N1]; int main()
{
//freopen("t1.in","r",stdin);
scanf("%d%d",&n,&m);
for(int i=;i<=;i++)
bin[i]=(<<i);
T.init();
for(int i=;i<=n;i++)
{
a[i]=gint();
pa[i]=pa[i-]^a[i];
T.insert(pa[i],i,);
}
char str[];
int l,r;uint x;
for(int i=;i<=m;i++)
{
scanf("%s",str);
if(str[]=='A'){
n++;a[n]=gint();
pa[n]=pa[n-]^a[n];
T.insert(pa[n],n,);
}else{
l=gint(),r=gint(),x=gint();
printf("%u\n",T.query(l-,r-,pa[n]^x));
}
}
return ;
}

BZOJ 3261 最大异或和 (可持久化01Trie)的更多相关文章

  1. BZOJ 3261: 最大异或和( 可持久化trie )

    搞成前缀和然后就可以很方便地用可持久化trie维护了.时间复杂度O((N+M)*25) -------------------------------------------------------- ...

  2. bzoj 3261 最大异或和 可持久化字典树(01树)

    题目传送门 思路: 由异或的性质可得,题目要求的式子可以转化成求$max(pre[n]^x^pre[i])$,$pre[i]$表示前缀异或和,那么我们现在就要求出这个东西,所以用可持久化字典树来求,每 ...

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

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

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

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MB Description       给定一个非负整数序列 {a},初始长度为 N.       ...

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

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

  6. BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)

    题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...

  7. BZOJ 3689 异或之 (可持久化01Trie+堆)

    题目大意:给你一个序列,求出第$K$大的两两异或值 先建出来可持久化$01Trie$ 用一个$set$/堆存结构体,存某个异或对$<i,j>$的第二关键字$j$,以及$ai\;xor\;a ...

  8. P5283 [十二省联考2019]异或粽子 可持久化01Trie+线段树

    $ \color{#0066ff}{ 题目描述 }$ 小粽是一个喜欢吃粽子的好孩子.今天她在家里自己做起了粽子. 小粽面前有 \(n\) 种互不相同的粽子馅儿,小粽将它们摆放为了一排,并从左至右编号为 ...

  9. bzoj 3261 最大异或和【可持久化trie】

    因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后 ...

随机推荐

  1. ZBrush通过显示与隐藏得到子物体

    在ZBrush®中得到子物体的方法有很多,本文将为大家介绍一种新的创建子物体的方法,通过显示和隐藏得到子物. ZBrush 4R8中文版下载:http://wm.makeding.com/iclk/? ...

  2. (2016北京集训十三)【xsy1531】魔法游戏 - Nim游戏

    题解: 好题!我的结论很接近正解了... 把一个数化成二进制,每次至少要拿走一位,最多全拿走,不能不拿.那么这就是一个经典的Nim问题了,子树异或起来就是根节点的答案,随便递推一下就行了. 代码: # ...

  3. pupload上传插件问题整理

    前些日子公司网站需要开发一个类似与百度文库上传文档的功能,实现文档的批量上传.展示以及继续上传的功能.开发完成后,通过在多版浏览器下的使用,发现了一系列问题,特总结于下,以免来者在这些问题上耗费太多时 ...

  4. 5kcrm增加权限管理中的模块(签到统计)

    1 首先在model表增加模块名称 2 在controll里增加方法 3 在授权的html增加表单

  5. BZOJ 2005 [Noi2010]能量採集 (容斥)

    [Noi2010]能量採集 Time Limit: 10 Sec  Memory Limit: 552 MB Submit: 2324  Solved: 1387 [id=2005"> ...

  6. 试用友盟SDK实现Android分享微信朋友圈

    社会化分享是眼下必学且火热的功能.之前有写第三方登录,那仅仅是社会化分享的一部分.今天来玩玩分享微信朋友圈. 为了方便操作,还是依照步骤写. 一,注冊 注冊应用已经在这里具体说明过了,这里就不多提了. ...

  7. [LeetCOde][Java] Best Time to Buy and Sell Stock III

    题目: Say you have an array for which the ith element is the price of a given stock on day i. Design a ...

  8. android 退出系统

    /** * */ package com.szkingdom.android.phone.utils; import java.io.BufferedReader; import java.io.IO ...

  9. ORA-01950: 表空间'USERS'中无权限的2种解决办法

    在创建了一个新的表空间和一个新的用户,当用这个新用户创建表时, 却出现:ORA-01950: 表空 间'USERS'中无权限.   我已经把创建表的权限赋给了此用户,怎么还会缺少权限呢?解决办法   ...

  10. 正睿NOIP赠送附加赛1

    T1:math 题目链接: http://zhengruioi.com/contest/156/problem/471 题解: 先讲讲我的乱搞做法.对于前面70%,我跑了背包.因为背包有后效性...我 ...