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:询问操作,你需要 ...
随机推荐
- 简单服务接口访问时权限以及缓存HashMap实现
实现拦截器: package com.zqc.share.framework.interceptor; import javax.annotation.Resource; import javax.s ...
- java多线程系类:JUC线程池:03之线程池原理(二)(转)
概要 在前面一章"Java多线程系列--"JUC线程池"02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明.内容包 ...
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 多软件系统集成缓存体系改进
由于我们同时开发多个大型应用系统同时系统有大量用户.高并发用户,平时访问系统的用户数量就有3万多人在线.需要对几十个系统进行持续优化改进,同时要增强信息系统的各种安全性. 如此多的系统.如此多的用户, ...
- MVC之前的那点事儿系列(10):MVC为什么不再需要注册通配符(*.*)了?
文章内容 很多教程里都提到了,在部署MVC程序的时候要配置通配符映射(或者是*.mvc)到aspnet_ISPAI.dll上,在.NET4.0之前确实应该这么多,但是.NET4.0之后已经不要再费事了 ...
- MongoDB之分片集群与复制集
分片集群 1.1.概念 分片集群是将数据存储在多台机器上的操作,主要由查询路由mongos.分片.配置服务器组成. ●查询路由根据配置服务器上的元数据将请求分发到相应的分片上,本身不存储集群的元数据, ...
- Win10系统出问题?简单一招即可修复win10!
时至今日,win10系统的普及率越来越高,在微软多种策略的强推下,10月份win10系统的市场份额已达22.59%,但win10系统也不是完美的,总有些还是会出现一些诸如打开应用程序出现闪退.乱码.总 ...
- greenDao:操作数据库的开源框架
greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...
- 【Alpha】十天屠龙记
团队名字: 一不小心就火了 屠龙天团少年们: 031402504 陈逸超 (组长) 031402505 陈少铭 031402511 黄家俊 031402515 翁祖航 031402516 黄瑞钰 03 ...
- 线段树 HDU 3397(真)
5 种操作 0 1 然后 异或 似乎这种2个更新的先后每次都搞不清 覆盖有覆盖就可以不异或 也不知道为什么 #include<stdio.h> #include<string.h& ...
- android开发之背景音乐与音效
android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) MediaPlayer class can be used to control playback of audio/v ...