BZOJ3261: 最大异或和(可持久化trie树)
题意
题目链接
Sol
设\(sum[i]\)表示\(1 - i\)的异或和
首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值
可持久化Trie树维护前缀xor,建树的时候维护一下每个节点被遍历了多少次
注意设置好偏移量,不然询问区间为\([1, 1]\)的时候可能挂掉
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 6e5 + 10;
inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-')f =- 1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}
int N, M, a[MAXN], sum[MAXN], cnt[MAXN * 25], ch[MAXN * 25][2], tot, root[MAXN];
void insert(int i, int x) {x = (sum[i] = sum[i - 1] ^ x);int p = root[i - 1], now = (root[i] = ++tot);for(int i = 23; i >= 0; i--) {bool nxt = x >> i & 1;ch[now][nxt ^ 1] = ch[p][nxt ^ 1];now = ch[now][nxt] = ++tot; p = ch[p][nxt];cnt[now] = cnt[p] + 1;}
}
int Query(int l, int r, int x) {r = root[r], l = root[l];int ans = 0;for(int i = 23; i >= 0; i--) {int nxt = x >> i & 1;if(cnt[ch[r][nxt ^ 1]] - cnt[ch[l][nxt ^ 1]] > 0) ans += 1 << i, r = ch[r][nxt ^ 1], l = ch[l][nxt ^ 1];else r = ch[r][nxt], l = ch[l][nxt];}return ans;
}
int main() {N = read(); M = read();for(int i = 1; i <= N; i++) a[i] = read(), insert(i, a[i]);char ss[4];for(int i = 1; i <= M; i++) {scanf("%s", ss + 1);if(ss[1] == 'A') N++, a[N] = read(), insert(N, a[N]);else {int l = read() - 1, r = read() - 1, val = read();printf("%d\n", Query(l - 1, r, val ^ sum[N]));}}
}
/*
5 5
2 6 4 3 6
A 1
Q 3 5 4
A 4
Q 5 7 0
Q 3 6 6
*/
BZOJ3261: 最大异或和(可持久化trie树)相关推荐
- 【bzoj3261】最大异或和 可持久化Trie树
题目描述 给定一个非负整数序列 {a},初始长度为 N. 有M个操作,有以下两种操作类型: 1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1. 2.Q l r x: ...
- BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- P4735 最大异或和 可持久化trie树
可持久化01trie类似主席树思想 但是不支持版本差(也可以加一个siz 做差) 只能再维护一个左端点的最大值即可 #include<bits/stdc++.h> using ...
- BZOJ3261 最大异或和 解题报告(可持久化Trie树)
本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类 ...
- 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 ...
- HDU - 4757 Tree(LCA+可持久化trie树)
题目链接:点击查看 题目大意:给出一棵有有n个节点的树,每个点都有一个权值,现在给出m个查询,每次查询的形式为:x,y,z,求出从点x到点y的路径上任选一点,使其与z的异或值最大,输出异或值 题目分析 ...
- BZOJ #3166. [Heoi2013]Alo(可持久化trie树+set)
#3166. [Heoi2013]Alo description solution code BZOJ3166 description Welcome to ALO ( Arithmetic and ...
- 省选专练(学习)可持久化Trie树(BZOJ3261)
这个似乎也不是好难啊 但是可持久化Trie还是可以干许多线性基不能干的事. 什么是可持久化Trie? 顾名思义:是一种可以持久化的Trie树 他的建树方式和键值式线段树方式类似 也支持版本的减法 查询 ...
- BZOJ 3261: 最大异或和 [可持久化Trie]
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1513 Solved: 657 [Submit][Status][Disc ...
最新文章
- tensorflow学习笔记————分类MNIST数据集
- shell编程--case判断
- 京东API网关实践之路!
- 怎样设置rotacast插件_百度克星、16倍速看视频,这5个谷歌插件简直太会玩了!...
- js java socket_js使用WebSocket,java使用WebSocket
- arma模型_R语言与计量经济学(七)ARMA模型
- GHOSTXP_SP3
- 智慧环卫系统建设方案(智能垃圾分类收运管理)
- 【超图+CESIUM】【基础API使用示例】40、超图|CESIUM - 特效-雨景设置
- ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用shap决策图结合LightGBM模型实现异常值检测案例之详细攻略
- ROS编程入门(C++ 及 思路)
- 实时视频通信技术调研
- 读《如何阅读一本书》
- App前端,Web前端,后端,微信小程序到底该学啥?
- C语言程序设计第二次作业
- 微信论坛交流小程序系统毕业设计毕设(4)开题报告
- 微信步步为营,百度节节溃败
- LoadRunner常见的报错-1
- oracle 修改jobs执行时间,oracle JOB常见的执行时间
- 仍在创业的路上,些许感悟(一)