BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作:
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树相关推荐
- BZOJ 3261: 最大异或和 [可持久化Trie]
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1513 Solved: 657 [Submit][Status][Disc ...
- BZOJ.3261.最大异或和(可持久化Trie)
题目链接 这个每次修改后缀好像很难搞,但是因为异或可以抵消,求sum[p~n]的最大值可以转化为求sum[1~n] xor sum[1~p-1]的最大值. \(p-1\in [l-1,r-1]\),用 ...
- 【bzoj3261】最大异或和 可持久化Trie树
题目描述 给定一个非负整数序列 {a},初始长度为 N. 有M个操作,有以下两种操作类型: 1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1. 2.Q l r x: ...
- BZOJ3261: 最大异或和(可持久化trie树)
题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...
- P4735 最大异或和 可持久化trie树
可持久化01trie类似主席树思想 但是不支持版本差(也可以加一个siz 做差) 只能再维护一个左端点的最大值即可 #include<bits/stdc++.h> using ...
- BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3519 Solved: 1493 [Submit][Status][Dis ...
- 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 ...
- BZOJ3261 最大异或和 解题报告(可持久化Trie树)
本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类 ...
- BZOJ #3166. [Heoi2013]Alo(可持久化trie树+set)
#3166. [Heoi2013]Alo description solution code BZOJ3166 description Welcome to ALO ( Arithmetic and ...
最新文章
- vue-自主研发非父子关系组件之间通信的问题
- Java工具类--Map集合与Java对象相互转换
- Android基础控件ProgressBar进度条的使用
- NIFI工作流备份和恢复
- 【转】3.3SharePoint服务器端对象模型 之 访问文件和文件夹(Part 3)
- 【Java深入理解】String str = “a“ + “b“ + “c“到底创建了几个对象?
- 【ENVI二次开发】关于批处理(Batch)模式与ENVI_DOIT的使用
- 沃尔玛痛失世界最大零售商 电商凶猛!
- 熊猫支持html5么,Steam疯狂周三特惠推荐:你给我看大熊猫,我就给你钱
- 如何在Vue中使用websocket?
- Oracle查询执行计划
- 2个74151实现16位数据选择器以及在Multisim的演示
- meltdown linux检测,如何检查你的Linux PC是否受Meltdown和Spectre安全缺陷影响
- 转载:软件工程师的视角看网络(网络那点事)
- 【概率论与数理统计(研究生课程)】知识点总结4(随机变量的数字特征)
- 东方航空移动信息化专家路耄:东航的移动互联。
- Teach yourself Programing in Ten Years(翻译+原文链接)
- 如何用不到200行代码实现经典小游戏贪吃蛇,附源代码及详细实现思路
- 隐私计算头条周刊(10.16-10.22)
- bizhubc226说明书_柯尼卡美能达复印机C226|C266扫描功能设置
热门文章
- .net中下载文件的方法(转)
- SQL Server 高级操作 视图和存储过程
- 行将消失的烧瓦匠人:“仿古”热潮下迎新生曙光
- IDC机房:运营商机房与第三方机房(昌平机房)优劣对比
- .net的mvc的fw版本为4.5发布到阿里云【云虚拟主机】上.
- 深度数据包检测DPI开发解析
- SpringBoot使用教程【1】Restful API设计 返回json,xml格式...
- Windows8.1+Eclipse搭建Hadoop2.7.2本地模式开发环境
- Compressive sensing
- alibaba面试题