BZOJ.3261.最大异或和(可持久化Trie)
题目链接
这个每次修改后缀好像很难搞,但是因为异或可以抵消,求sum[p~n]的最大值可以转化为求sum[1~n] xor sum[1~p-1]的最大值。
\(p-1\in [l-1,r-1]\),用可持久化Trie查区间[l-1,r-1] xor x xor sum[1~n]的最大值即可。
另外可持久化Trie查的是区间某一个数异或另一个数的最大值,所以要插入的是前缀和。
注意对于区间[1,1]的询问是可以用0 xor的,所以要在前面加上这个0,而且不能在root[0]加(除非用root[l-2=-1])。不妨直接向右偏移1,在root[1]插入这个0。
//179000kb 3508ms
#include <cstdio>
#include <cctype>
#include <algorithm>
//#define gc() getchar()
#define MAXIN 50000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
#define BIT 23
const int N=6e5+5;//N+M!int root[N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Trie
{#define S N*25int tot,son[S][2],sz[S];void Insert(int x,int y,int v){for(int i=BIT; ~i; --i){int c=v>>i&1;son[x][c]=++tot, son[x][c^1]=son[y][c^1];x=tot/*son[x][c]*/, y=son[y][c];sz[x]=sz[y]+1;}}int Query(int x,int y,int v)//x~y{int res=0;for(int i=BIT; ~i; --i){int c=(v>>i&1)^1;if(sz[son[y][c]]-sz[son[x][c]]>0)x=son[x][c], y=son[y][c], res|=1<<i;elsec^=1, x=son[x][c], y=son[y][c];}return res;}
}T;inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}
inline char readc()
{register char c=gc();for(; c!='A'&&c!='Q'; c=gc());return c;
}int main()
{int n=read()+1, Q=read(), sum=0;T.Insert(root[1]=++T.tot,0/*root[0]*/,0);for(int i=2; i<=n; ++i)T.Insert(root[i]=++T.tot,root[i-1],sum^=read());for(int l,r; Q--; )if(readc()=='A')T.Insert(root[n+1]=++T.tot,root[n],sum^=read()), ++n;elsel=read(),r=read(),printf("%d\n",T.Query(root[l-1],root[r],sum^read()));//偏移了就正常了..
// l=read(),r=read(),printf("%d\n",T.Query(root[std::max(l-2,0)],root[r-1],sum^read()));return 0;
}
转载于:https://www.cnblogs.com/SovietPower/p/9717663.html
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树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3519 Solved: 1493 [Submit][Status][Dis ...
- bzoj 3261 最大异或和【可持久化trie】
因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后 ...
- 【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,建树的时候 ...
- P4592 [TJOI2018]异或 (可持久化Trie)
[题目链接] https://www.luogu.org/problemnew/show/P4592 题目描述 现在有一颗以\(1\)为根节点的由\(n\)个节点组成的树,树上每个节点上都有一个权值\ ...
- P4735 最大异或和 可持久化trie树
可持久化01trie类似主席树思想 但是不支持版本差(也可以加一个siz 做差) 只能再维护一个左端点的最大值即可 #include<bits/stdc++.h> using ...
- 【BZOJ 4103】 4103: [Thu Summer Camp 2015]异或运算 (可持久化Trie)
4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 474 Solved: 258 D ...
最新文章
- 美元加息怎么“剪羊毛”
- golang模板与json的应用
- PAT甲级1046 Shortest Distance:[C++题解]前缀和
- 数据库视频总结二(Transact-SQL语言)
- [vijos1162]波浪数
- oracle 静默 建库,静默安装Oracle 11gR2软件并且手动建库
- 数据结构 堆 栈 是什么 区别
- 元素偏移量offset系列(附实例)
- JAVA将图片转成base64导出到word中
- “今夜酒店特价”的商业模式是什么?www.souapp.com搜应用推荐
- win11系统中文名改英文名(win11、win10修改用户名)超详细图文
- clientX,clientY,screenX,screenY,offsetX,offsetY 区别测试
- 【深度学习】神经网络的学习过程
- Kibana数据表格
- 网络工程师备考6章(续3)
- 如何查看raid控制器的信息HP DELL
- 计算机四级网络工程师考点总结
- 2021年Gartner数据防泄露市场指南发布,做为中国数据安全代表性厂商天空卫士连续三年入选
- android 涂鸦(清屏,画笔,粗细,保存)以及canvas源码学习
- python画猪头程序_用python画猪头的方法
热门文章
- iview select 内存泄漏_Vue遇到的内存泄漏排查处理
- 运维学python哪部分_初入运维的小伙伴,别再问需不需要学Python了
- 北风网ajax,[T8:JavaScript中利用Ajax实现客户端与服务器端通信北风网收费视频讲座.ppt...
- WPF RadioButton按钮控件取消选中设置
- 使用Python编写Prometheus监控metrics接口
- OPNET网络仿真分析-1.2、OPNET安装教程
- matlab2c使用c++实现matlab函数系列教程-circshift函数
- Backend Qt5Agg is interactive backend. Turning interactive mode on.
- leetcode_day02
- 洛谷 P3958 奶酪