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+;
- int n,m,sz;
- int t[maxn<<][],sum[maxn<<],b[maxn],q[maxn];
- inline int read(){
- char ch=getchar();
- int s=,f=;
- while (!(ch>=''&&ch<='')) {if (ch=='-') f=-;ch=getchar();}
- while (ch>=''&&ch<='') {s=(s<<)+(s<<)+ch-'';ch=getchar();}
- return s*f;
- }
- int ins(int last,int val)
- {
- int res,k;
- res=k=++sz;
- for (int i=;i>=;i--)
- {
- sum[k]=sum[last]+;
- t[k][]=t[last][];t[k][]=t[last][];
- bool d=val&(<<i);
- k=t[k][d]=++sz;last=t[last][d];
- }
- sum[k]=sum[last]+;
- return res;
- }
- int query(int k1,int k2,int val)
- {
- int res=;
- for (int i=;i>=;i--)
- {
- bool d=val&(<<i);
- if (sum[t[k2][d^]]-sum[t[k1][d^]]>){
- res|=(<<i);
- k1=t[k1][d^];
- k2=t[k2][d^];
- }
- else k1=t[k1][d],k2=t[k2][d];
- }
- return res;
- }
- int main()
- {
- n=read()+;m=read();
- q[]=ins(q[],b[]);
- for (int i=;i<=n;i++)
- {
- b[i]=b[i-]^read();//注意插入trie的是前缀和
- q[i]=ins(q[i-],b[i]);
- }
- for (int i=;i<=m;i++)
- {
- char ch=getchar();
- while (!(ch=='A'||ch=='Q')) ch=getchar();
- if (ch=='A') {
- ++n;
- b[n]=b[n-]^read();
- q[n]=ins(q[n-],b[n]);
- }
- else {
- int l=read(),r=read(),x=read();
- printf("%d\n",query(q[l-],q[r],x^b[n]));
- }
- }
- return ;
- }
BZOJ3261 最大异或和 解题报告(可持久化Trie树)的更多相关文章
- [十二省联考2019] 异或粽子 解题报告 (可持久化Trie+堆)
interlinkage: https://www.luogu.org/problemnew/show/P5283 description: solution: 显然有$O(n^2)$的做法,前缀和优 ...
- HDU4825:Xor Sum 解题报告(0/1 Trie树)
Problem Description Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数. 随后 Prometheus 将向 Ze ...
- 【洛谷5283】[十二省联考2019] 异或粽子(可持久化Trie树+堆)
点此看题面 大致题意: 求前\(k\)大的区间异或和之和. 可持久化\(Trie\)树 之前做过一些可持久化\(Trie\)树题,结果说到底还是主席树. 终于,碰到一道真·可持久化\(Trie\)树的 ...
- BZOJ3261: 最大异或和(可持久化trie树)
题意 题目链接 Sol 设\(sum[i]\)表示\(1 - i\)的异或和 首先把每个询问的\(x \oplus sum[n]\)就变成了询问前缀最大值 可持久化Trie树维护前缀xor,建树的时候 ...
- 【bzoj3261】【最大异或和】可持久化trie树+贪心
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=61705397 Description 给定一个非 ...
- 【bzoj3261】最大异或和 可持久化Trie树
题目描述 给定一个非负整数序列 {a},初始长度为 N. 有M个操作,有以下两种操作类型:1.A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1.2.Q l r x:询问操 ...
- [BZOJ3261&BZOJ3166]可持久化trie树及其应用
可持久化trie树 可持久化trie树现在想来是比较好理解的了,但却看了一个下午... 相当于对于每个状态建立一条链(或者说一棵trie),求解的时候只要让两个点按照相同的步子走然后看sum的大小关系 ...
- [十二省联考2019]异或粽子——可持久化trie树+堆
题目链接: [十二省联考2019]异或粽子 求前$k$大异或区间,可以发现$k$比较小,我们考虑找出每个区间. 为了快速得到一个区间的异或和,将原序列做前缀异或和. 对于每个点作为右端点时,我们维护出 ...
- bzoj 3261: 最大异或和 (可持久化trie树)
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Description 给定一个非负整数序列 {a},初始长度为 N. ...
随机推荐
- JDBC连接mysql时出现的ssl问题
使用MySQL数据库时出现如下错误: WARN: Establishing SSL connection without server's identity verification is not r ...
- 闭包(closure)与协程共用时要注意的事情
闭包是一种能够让你用非常舒服的方式来编程的小技巧,Go也支持闭包. 假设从来没有接触过闭包,想在一開始就弄懂什么是闭包(closure)是非常困难的,就像递归一样,直到你真正写过.用过它,你才干真正的 ...
- ASP.NET form method "post" and "get"
https://forums.asp.net/t/1796310.aspx?ASP+NET+form+method+post+and+get+ GET: 1) Data is appended to ...
- Creating a New Master Page in SharePoint 2013
Creating a New Master Page in SharePoint 2013 This article explains how to create a Master Page in S ...
- hiho150周 - 动态规划*
题目链接 一个n*m的迷宫由‘.’和'b'组成,从(1,1)走到(n,m),只能向右或者向下走,但遇到‘b’时才能改变方向,开始时方向向右. 问到达(n,m)至少改变几个位置上的值 /******** ...
- 3ds Max实例教程:制作雪的材质
导言: 本教程为大家讲解使用3ds MAX制作真实的雪材质制作过程,非常简单的教程,但个人觉得讲解的非常好,希望这套比较老的教程能给你带来帮助. 下面教程开始 雪的材质看似简单,其实它的制做并不是想像 ...
- nginx访问日志access_log
在 nginx.conf 配置文件 http{} 方法体的括号内,增加或者打开以下代码注释: log_format main '$remote_addr - $remote_user [$time_l ...
- 算法38---292. Nim游戏
1.题目: 你和你的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头. 拿掉最后一块石头的人就是获胜者.你作为先手. 你们是聪明人,每一步都是最优解. 编写一个函 ...
- [POJ2823][洛谷P1886]滑动窗口 Sliding Window
题目大意:有一列数,和一个窗口,一次能框连续的s个数,初始时窗口在左端,不断往右移动,移到最右端为止,求每次被框住的s个数中的最小数和最大数. 解题思路:这道题是一道区间查询问题,可以用线段树做.每个 ...
- ajax 不执行
1.get形式访问: 一个相同的URL 只有一个结果,所以 第二次访问的时候 如果 URL字符串没变化 浏览器是 直接拿出了第一次访问的结果,post则不会 解决办法: 1.url+new Date( ...