BZOJ3261 最大异或和 解题报告(可持久化Trie树)
本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261
题目描述
输入
第一行包含两个整数 N ,M,含义如问题描述所示。
第二行包含 N个非负整数,表示初始的序列 A 。
接下来 M行,每行描述一个操作,格式如题面所述。
输出
假设询问操作有 T个,则输出应该有 T行,每行一个整数表示询问的答案。
样例输入
2 6 4 3 6
A 1
Q 3 5 4
A 4
Q 5 7 0
Q 3 6 6
对于测试点 1-2,N,M<=5 。
对于测试点 3-7,N,M<=80000 。
对于测试点 8-10,N,M<=300000 。
其中测试点 1, 3, 5, 7, 9保证没有修改操作。
0<=a[i]<=10^7。
样例输出
5
6
题解:
#include<bits/stdc++.h> using namespace std;const int maxn=6e5+15; int n,m,sz; int t[maxn<<5][2],sum[maxn<<5],b[maxn],q[maxn]; inline int read(){char ch=getchar();int s=0,f=1;while (!(ch>='0'&&ch<='9')) {if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9') {s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}return s*f; } int ins(int last,int val) {int res,k;res=k=++sz;for (int i=23;i>=0;i--){sum[k]=sum[last]+1;t[k][0]=t[last][0];t[k][1]=t[last][1];bool d=val&(1<<i);k=t[k][d]=++sz;last=t[last][d];}sum[k]=sum[last]+1;return res; } int query(int k1,int k2,int val) {int res=0;for (int i=23;i>=0;i--){bool d=val&(1<<i);if (sum[t[k2][d^1]]-sum[t[k1][d^1]]>0){res|=(1<<i);k1=t[k1][d^1];k2=t[k2][d^1];}else k1=t[k1][d],k2=t[k2][d];}return res; } int main() {n=read()+1;m=read();q[1]=ins(q[0],b[1]);for (int i=2;i<=n;i++){b[i]=b[i-1]^read();//注意插入trie的是前缀和 q[i]=ins(q[i-1],b[i]);}for (int i=1;i<=m;i++){char ch=getchar();while (!(ch=='A'||ch=='Q')) ch=getchar();if (ch=='A') {++n;b[n]=b[n-1]^read();q[n]=ins(q[n-1],b[n]);}else {int l=read(),r=read(),x=read();printf("%d\n",query(q[l-1],q[r],x^b[n]));}}return 0; }
转载于:https://www.cnblogs.com/xxzh/p/9188295.html
BZOJ3261 最大异或和 解题报告(可持久化Trie树)相关推荐
- 【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,建树的时候 ...
- 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 ...
- BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3519 Solved: 1493 [Submit][Status][Dis ...
- 省选专练(学习)可持久化Trie树(BZOJ3261)
这个似乎也不是好难啊 但是可持久化Trie还是可以干许多线性基不能干的事. 什么是可持久化Trie? 顾名思义:是一种可以持久化的Trie树 他的建树方式和键值式线段树方式类似 也支持版本的减法 查询 ...
- P4735 最大异或和 01可持久化Trie树模板
原题:https://www.luogu.org/problemnew/show/P4735 题解:观察一下式子,将a数组求一个异或前缀和,其实就是s[n]^x^s[p-1]的最大值 p∈[l,r], ...
- 洛谷 P2420 让我们异或吧 解题报告
P2420 让我们异或吧 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中-xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor( B ...
- C++解题报告——Rima(字典树+树形DP)
题目描述 Adrian对单词押韵很感兴趣.如果两个单词的最长公共后缀的长度与两个单词中较长那个的长度一样,或者等于较长单词的长度减一,则这两个单词押韵.换句话说,如果A,B的最长公共后缀LCS(A,B ...
- [JZOJ 5909] [NOIP2018模拟10.16] 跑商(paoshang) 解题报告 (圆方树)
题目链接: https://jzoj.net/senior/#contest/show/2529/2 题目: 题目背景: 尊者神高达很穷,所以他需要跑商来赚钱 题目描述: 基三的地图可以看做 n 个城 ...
最新文章
- Kali Linux WPScan更新到2.9.3
- 【百度飞浆】YOLO系列目标检测算法详解
- 爆笑!物理书上的照片能不能好好选选啊喂!
- php ajax session死锁,session过期,ajax请求处理
- HTTP的短连接、长连接、管道连接流水线
- linux appium 安装教程,Ubuntu 系统安装 Appium 及样例运行教程
- 创建Django项目
- jsonobject中getkey_获取JSON中所有的KEY
- 本地文件搜索神器 --- Everything软件,快速搜索本地磁盘上的文件
- 《当程序员的那些狗日日子》(四十)繁杂的需求
- Linux下通过虚拟网卡实现局域网 转发tcp/udp流量
- 定制LK阶段开机LOGO
- 如何进行英文文献检索
- 设计一个程序,帮助小学生练习10以内的加法题目
- 简单操作拥有Win7/XP双系统
- AES 轮密钥(子密钥如何生成).md
- 面向深度学习系统的对抗样本攻击与防御
- apue学习第九天——标准I/O库(第五章)
- 计算机组织电脑义诊是什么,计科院计算机协会开展电脑义诊活动
- 已知道三个点求平面方程(这些玩意都忘了好久了~~)
热门文章
- (转)C# Delegate.Invoke、Delegate.BeginInvoke
- RecyclerView滑动到指定位置,并置顶
- 四周第四次课(1月5日) 6.1 压缩打包介绍 6.2 gzip压缩工具 6.3 bzip2压缩工具 6.4 xz压缩工具...
- Java基础笔记12
- C# 字段 属性 方法 三霸主齐上阵
- Source Insight 格式化
- 转载的Web.config详解
- 改变客户端访问时的方法名
- C/C++内存管理详解
- HTTPS加密那点事--轻松秒懂HTTPS非对称加密