bzoj3261: 最大异或和 (可持久化trie树)
题目链接
题解
看到异或和最大就应该想到01 trie树
我们记\(S_i\)为前i项的异或和
那么我们的目的是最大化\(S_n\)$x$\(S_{j-1}\) \((l <= j <= r)\) (注意是\(j-1\), 所以l和r都要减1)
\(S_n\)^\(x\)已经固定, 那么我们可以把\(S_j\)放入trie树搞
那么怎么处理区间呢?
类似主席树
记录一下\([1-i]\)每个节点被多少个数经过
那么两棵trie树相减,就得到了 \([l-r]\)这段区间的信息
然后就是经典的模型了
Code
#include<bits/stdc++.h>
const int N = 600010, M = 25;
#define LL long long
#define RG register
int ch[N*30][2], sum[N*30], root[N], cnt, tot, ans;
using namespace std;
inline int gi() {
RG int x = 0; RG char c = getchar(); bool f = 0;
while (c != '-' && (c < '0' || c > '9')) c = getchar();
if (c == '-') c = getchar(), f = 1;
while (c >= '0' && c <= '9') x = x*10+c-'0', c = getchar();
return f ? -x : x;
}
void insert(int &now, int x, int dep) {
sum[++cnt] = sum[now]+1;
ch[cnt][0] = ch[now][0]; ch[cnt][1] = ch[now][1];
now = cnt;
if (dep < 0) return ;
insert(ch[now][(x >> dep) & 1], x, dep-1);
return ;
}
void query(int rt1, int rt2, int x, int dep) {
if (dep < 0) return ;
int k = (x >> dep)&1;
if (sum[ch[rt2][k^1]]-sum[ch[rt1][k^1]] > 0) {
ans |= (1 << dep);
query(ch[rt1][k^1], ch[rt2][k^1], x, dep-1);
}
else query(ch[rt1][k], ch[rt2][k], x, dep-1);
return ;
}
int main() {
//freopen(".in", "r", stdin);
//freopen(".out", "w", stdout);
int n = gi(), m = gi();
for (int i = 1; i <= n; i++) {
int x = gi();
tot ^= x; root[i] = root[i-1];
insert(root[i], tot, M-1);
}
for (int i = 1; i <= m; i++) {
char c = getchar();
while (c != 'A' && c != 'Q') c = getchar();
if (c == 'A') {
int x = gi();
tot ^= x;
root[n+1] = root[n];
insert(root[++n], tot, M-1);
}
else {
int l = gi()-1, r = gi()-1, x = gi();
ans = 0;
query(root[l-1], root[r], tot^x, M-1);
if (!l) ans = max(ans, tot^x);
printf("%d\n", ans);
}
}
return 0;
}
bzoj3261: 最大异或和 (可持久化trie树)的更多相关文章
- BZOJ3261: 最大异或和(可持久化trie树)
题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...
- 【bzoj3261】最大异或和 可持久化Trie树
题目描述 给定一个非负整数序列 {a},初始长度为 N. 有M个操作,有以下两种操作类型:1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1.2.Q l r x:询问操 ...
- [十二省联考2019]异或粽子——可持久化trie树+堆
题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...
- 【bzoj3689】异或之 可持久化Trie树+堆
题目描述 给定n个非负整数A[1], A[2], ……, A[n].对于每对(i, j)满足1 <= i < j <= n,得到一个新的数A[i] xor A[j],这样共有n*(n ...
- BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- 洛谷P4592 [TJOI2018]异或 【可持久化trie树】
题目链接 BZOJ4592 题解 可持久化trie树裸题 写完就A了 #include<algorithm> #include<iostream> #include<cs ...
- bzoj3261: 最大异或和 可持久化trie
题意:给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x,序列的长度N+1. 2.Qlrx:询问操作,你需要找到一个位置p,满 ...
- [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树
4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...
- 【bzoj4103】[Thu Summer Camp 2015]异或运算 可持久化trie树
Description 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor yj,每次询问给定矩形区域i ...
- 【bzoj3261】【最大异或和】可持久化trie树+贪心
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61705397 Description 给定一个非 ...
随机推荐
- 4-fiddler抓包中文乱码:
接受到的html被压缩了,要解压,在工具栏有decode
- Nginx 模块开发
Nginx 模块概述 Nginx 模块有三种角色: 处理请求并产生输出的 Handler 模块 : 处理由 Handler 产生的输出的 Filter (滤波器)模块: 当出现多个后台 服务器时, ...
- jquery select 左右移动
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx. ...
- HightCharts开发总结
1. 简介:Highcharts是一款纯javascript编写的图表库,能够在Web网站或Web应用中添加交互性的图表,现在官方的最新版本为Highcharts-4.2.3. 2. 兼容性: ...
- MySQL性能调优与架构设计——第3章 MySQL存储引擎简介
第3章 MySQL存储引擎简介 3.1 MySQL 存储引擎概述 MyISAM存储引擎是MySQL默认的存储引擎,也是目前MySQL使用最为广泛的存储引擎之一.他的前身就是我们在MySQL发展历程中所 ...
- 301 MovedPermanently 重定向
页面永久性移走(301重定向)是一种非常重要的“自动转向”技术. 301重定向可促进搜索引擎优化效果 从搜索引擎优化角度出发,301重定向是网址重定向最为可行的一种办法.当网站的域名发生变更后,搜索引 ...
- react-native-echarts构建的图表出现滚动条并且可以滑动的问题
前段时间做echarts饼状图,按照官方提供的写法完成以后图表可以出来,但是虚拟机上演示出现了滚动条,并且拖动时就会出现空白,双击会缩小像这样 参考GitHub上给出的方法修改成功: no ...
- 用JS实现表格的高亮显示
1.所用事件详解 2.<thead>,<tbody>标签介绍 <thead> 标签定义表格的表头.该标签用于组合 HTML 表格的表头内容. thead 元素应该与 ...
- javascript webstorm用法
javascript webstorm用法 一.什么是webstorm? WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“We ...
- k8s学习笔记(一)
你将学到什么 如何部署k8s集群 网络拓扑 主机名 网络地址 角色 study 92.0.0.50(内网) 192.168.203.250/19(外网) Master fnode 92.0.0.16( ...