BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树
3261: 最大异或和
Time Limit: 10 Sec Memory Limit: 512 MB
Submit: 3519 Solved: 1493
[Submit][Status][Discuss]
Description
Input
第一行包含两个整数 N ,M,含义如问题描述所示。
第二行包含 N个非负整数,表示初始的序列 A 。
接下来 M行,每行描述一个操作,格式如题面所述。
Output
假设询问操作有 T个,则输出应该有 T行,每行一个整数表示询问的答案。
Sample Input
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。
Sample Output
5
6
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int maxn=6e5; 5 6 int son[maxn<<5][2],sum[maxn<<5],root[maxn],ret[maxn],sz=0; 7 //son每个节点指向的两个节点的位置,sum每个节点出现的次数,root每棵01Trie根节点的位置 8 9 void insert(int val,int &x,int pre) 10 { 11 x=++sz;int t=x; 12 for(int i=23;i>=0;i--){ 13 son[t][0]=son[pre][0];son[t][1]=son[pre][1]; 14 sum[t]=sum[pre]+1; 15 int j=(val>>i)&1; 16 son[t][j]=++sz;//新开的节点 17 t=son[t][j];pre=son[pre][j]; 18 } 19 sum[t]=sum[pre]+1; 20 } 21 22 int query(int val,int x,int y) 23 { 24 int ans=0; 25 for(int i=23;i>=0;i--){ 26 int j=(val>>i)&1; 27 if(sum[son[y][j^1]]-sum[son[x][j^1]]>0){ 28 ans+=(1<<i); 29 x=son[x][j^1];y=son[y][j^1]; 30 } 31 else{ 32 x=son[x][j];y=son[y][j]; 33 } 34 } 35 return ans; 36 } 37 38 int main() 39 { 40 int n,m,x; 41 scanf("%d%d",&n,&m); 42 insert(ret[1],root[1],root[1]); 43 for(int i=2;i<=n+1;i++){ 44 scanf("%d",&x); 45 ret[i]=ret[i-1]^x; 46 insert(ret[i],root[i],root[i-1]); 47 } 48 int h=n+1; 49 while(m--){ 50 char op[2]; 51 scanf("%s",op); 52 if(op[0]=='A'){ 53 scanf("%d",&x); 54 ++h; 55 ret[h]=ret[h-1]^x; 56 insert(ret[h],root[h],root[h-1]); 57 } 58 else{ 59 int l,r; 60 scanf("%d%d%d",&l,&r,&x); 61 printf("%d\n",query(ret[h]^x,root[l-1],root[r])); 62 } 63 } 64 return 0; 65 }
圆润的走开了。。。
转载于:https://www.cnblogs.com/ZERO-/p/10287651.html
BZOJ 3261: 最大异或和位置-贪心+可持久化01Trie树相关推荐
- BZOJ 3261: 最大异或和 [可持久化Trie]
3261: 最大异或和 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1513 Solved: 657 [Submit][Status][Disc ...
- BZOJ 3261 最大异或和 可持久化Trie树
题目大意:给定一个序列,提供下列操作: 1.在数组结尾插入一个数 2.给定l,r,x,求一个l<=p<=r,使x^a[p]^a[p+1]^...^a[n]最大 首先我们能够维护前缀和 然后 ...
- BZOJ3261 最大异或和 解题报告(可持久化Trie树)
本题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3261 题目描述 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类 ...
- BZOJ.3218.a + b Problem(最小割ISAP 可持久化线段树优化建图)
BZOJ UOJ 首先不考虑奇怪方格的限制,就是类似最大权闭合子图一样建图. 对于奇怪方格的影响,显然可以建一条边\((i\to x,p_i)\),然后由\(x\)向\(1\sim i-1\)中权值在 ...
- [BZOJ 3207] 花神的嘲讽计划Ⅰ【Hash + 可持久化线段树】
题目链接:BZOJ - 3207 题目分析 先使用Hash,把每个长度为 k 的序列转为一个整数,然后题目就转化为了询问某个区间内有没有整数 x . 这一步可以使用可持久化线段树来做,虽然感觉可以有更 ...
- bzoj 3261 最大异或和【可持久化trie】
因为在后面加数字又求后缀和太麻烦,所以xor[p...n]=xor[1...n]^xor[p-1...n]. 首先处理出来区间异或前缀和,对前缀和建trie树(在最前面放一棵0表示最开始的前缀和 然后 ...
- BZOJ.3261.最大异或和(可持久化Trie)
题目链接 这个每次修改后缀好像很难搞,但是因为异或可以抵消,求sum[p~n]的最大值可以转化为求sum[1~n] xor sum[1~p-1]的最大值. \(p-1\in [l-1,r-1]\),用 ...
- 【CodeForces 1100F】异或线性基 | 贪心 | 离线区间最大异或和 | E
补题ing- 真的不应该错过这场比赛的 qwq 1100F. Ivan and Burgers time limit per test: 3 seconds memory limit per test ...
- BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)
题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...
最新文章
- .Net开发时有没有好的页面开发框架?
- win10 远程ubuntu
- Php 魔术函数性能,php常用的魔术函数详细解析
- 怎么向小学生解释欧拉公式 e^(πi)+1=0?
- All in Linux:一个算法工程师的IDE断奶之路
- Maven项目无法加载jdbc.properties
- 自旋锁和互斥锁实例_多线程编程之自旋锁
- Android 驱动(5)---MTK 平台分区表
- 《Android游戏开发详解》一1.8 控制流程第2部分——while和for循环
- 强悍的命令 —— 命令参数的理解
- 创建你自己的AngularJS -- 第一部分 Scopes(一)
- Windows中ActiveX控件注册的方法
- 转发-神器|最强电脑搜索神器(啥都能搜!!!)
- 页面字体颜色的设置及常用颜色的RGB值
- 马哥教育开学感想随笔
- 小米6刷android 8.0,小米6可以吃奥利奥了,抢先刷安卓8.0
- 牛顿迭代法求一个数的平方根(python)
- 区块链开发工程师和人工智能算法工程师,哪个会在未来 5 年收入更高?
- 路漫漫其修远兮···VB 来15个数尝尝咸淡
- 关于 maven插件爆红或插件版本爆红问题解决(且本地仓库存在相应插件版本)