题意

题目链接

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树)相关推荐

  1. 【bzoj3261】最大异或和 可持久化Trie树

    题目描述 给定一个非负整数序列 {a},初始长度为 N.        有M个操作,有以下两种操作类型: 1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1. 2.Q l r x: ...

  2. BZOJ 3261 最大异或和 可持久化Trie树

    题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...

  3. P4735 最大异或和 可持久化trie树

    可持久化01trie类似主席树思想    但是不支持版本差(也可以加一个siz 做差)    只能再维护一个左端点的最大值即可 #include<bits/stdc++.h> using ...

  4. BZOJ3261 最大异或和 解题报告(可持久化Trie树)

    本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类 ...

  5. 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 ...

  6. HDU - 4757 Tree(LCA+可持久化trie树)

    题目链接:点击查看 题目大意:给出一棵有有n个节点的树,每个点都有一个权值,现在给出m个查询,每次查询的形式为:x,y,z,求出从点x到点y的路径上任选一点,使其与z的异或值最大,输出异或值 题目分析 ...

  7. BZOJ #3166. [Heoi2013]Alo(可持久化trie树+set)

    #3166. [Heoi2013]Alo description solution code BZOJ3166 description Welcome to ALO ( Arithmetic and ...

  8. 省选专练(学习)可持久化Trie树(BZOJ3261)

    这个似乎也不是好难啊 但是可持久化Trie还是可以干许多线性基不能干的事. 什么是可持久化Trie? 顾名思义:是一种可以持久化的Trie树 他的建树方式和键值式线段树方式类似 也支持版本的减法 查询 ...

  9. BZOJ 3261: 最大异或和 [可持久化Trie]

    3261: 最大异或和 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 1513  Solved: 657 [Submit][Status][Disc ...

最新文章

  1. tensorflow学习笔记————分类MNIST数据集
  2. shell编程--case判断
  3. 京东API网关实践之路!
  4. 怎样设置rotacast插件_百度克星、16倍速看视频,这5个谷歌插件简直太会玩了!...
  5. js java socket_js使用WebSocket,java使用WebSocket
  6. arma模型_R语言与计量经济学(七)ARMA模型
  7. GHOSTXP_SP3
  8. 智慧环卫系统建设方案(智能垃圾分类收运管理)
  9. 【超图+CESIUM】【基础API使用示例】40、超图|CESIUM - 特效-雨景设置
  10. ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用shap决策图结合LightGBM模型实现异常值检测案例之详细攻略
  11. ROS编程入门(C++ 及 思路)
  12. 实时视频通信技术调研
  13. 读《如何阅读一本书》
  14. App前端,Web前端,后端,微信小程序到底该学啥?
  15. C语言程序设计第二次作业
  16. 微信论坛交流小程序系统毕业设计毕设(4)开题报告
  17. 微信步步为营,百度节节溃败
  18. LoadRunner常见的报错-1
  19. oracle 修改jobs执行时间,oracle JOB常见的执行时间
  20. 仍在创业的路上,些许感悟(一)

热门文章

  1. 【原创】ASP.NET C# 对SQL/ACCESS 数据库的备份和还原函数
  2. Laravel 深入核心系列教程
  3. ssh框架 验证码实现
  4. 对pushState、replaceState和onpopstate一点使用
  5. 我不是九爷 带你了解 ansible
  6. 80后屌丝站长自曝日赚6000(纯分享贴)
  7. android之Handler详解
  8. 深入浅出hive-hive简介
  9. AJAX实例二:实现类似Google的搜索提示【原著】
  10. Sql Server 2005跨数据查询