正题

题目链接:https://www.luogu.com.cn/problem/P4585


题目大意

nnn个集合,开始每个集合中有一个数字。

  1. 开启新的一天并且往集合sss中插入数字vvv
  2. 询问ddd天以内插入的数字(包括最开始的)中l∼rl\sim rl∼r集合内的数字异或上xxx的最大值。

所有数字均在[0,105][0,10^5][0,105]范围内


解题思路

线段树上每个节点维护一个可持久化TrieTrieTrie。

每次插入就把包含sss的节点插入数字vvv。

询问就正常查询即可。

时空间复杂度都是O(nlog⁡2n)O(n\log^2 n)O(nlog2n)

好像还有空间是O(nlog⁡n)O(n\log n)O(nlogn)的线段树分治算法,不过懒得写了。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int n,m,cnt,p[N],rt[N<<2];
int ch[N<<9][2],last[N<<9];
int Insert(int x,int val,int id,int k=16){int y=++cnt;if(k<0){last[y]=id;return y;}int c=(val>>k)&1;ch[y][c^1]=ch[x][c^1];ch[y][c]=Insert(ch[x][c],val,id,k-1);last[y]=max(last[ch[y][0]],last[ch[y][1]]);return y;
}
int Ask(int x,int val,int lim,int k=16){if(k<0)return val;int c=(val>>k)&1;if(last[ch[x][c^1]]>=lim)return Ask(ch[x][c^1],val|(1<<k),lim,k-1);if(last[ch[x][c]]>=lim)return Ask(ch[x][c],val^(val&(1<<k)),lim,k-1);return 0;
}
void Change(int x,int l,int r,int pos,int id,int val){rt[x]=Insert(rt[x],val,id);if(l==r)return;int mid=(l+r)>>1;if(pos<=mid)Change(x*2,l,mid,pos,id,val);else Change(x*2+1,mid+1,r,pos,id,val);return;
}
int Query(int x,int L,int R,int l,int r,int val,int lim){if(L==l&&R==r)return Ask(rt[x],val,lim);int mid=(L+R)>>1;if(r<=mid)return Query(x*2,L,mid,l,r,val,lim);if(l>mid)return Query(x*2+1,mid+1,R,l,r,val,lim);return max(Query(x*2,L,mid,l,mid,val,lim),Query(x*2+1,mid+1,R,mid+1,r,val,lim));
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){int x;scanf("%d",&x);p[i]=Insert(p[i-1],x,i);}int id=0;for(int i=1;i<=m;i++){int op;scanf("%d",&op);if(op){int l,r,x,d,ans=0;scanf("%d%d%d%d",&l,&r,&x,&d);ans=Query(1,1,n,l,r,x,id-d+1);ans=max(ans,Ask(p[r],x,l));printf("%d\n",ans);}else{int s,v;scanf("%d%d",&s,&v);id++;Change(1,1,n,s,id,v);}}return 0;
}

P4585-[FJOI2015]火星商店问题【线段树,可持久化Trie】相关推荐

  1. 2019.01.13 bzoj4137: [FJOI2015]火星商店问题(线段树分治+可持久化01trie)

    传送门 题意:序列上有nnn个商店,有两种事件会发生: sss商店上进购标价为vvv的一个物品 求编号为[l,r][l,r][l,r]之间的位置买ddd天内新进购的所有物品与一个数xxx异或值的最大值 ...

  2. bzoj4137[FJOI2015]火星商店问题

    分析: 首先,一看到求val xor x最大,我们就应该想到可持久化Trie,(详见P4585),这样,当我们询问 L,RL,RL,R 之间的最大异或值时,就直接套用可持久化Trie就行了,这样空间这 ...

  3. Codeforces1422 F.Boring Queries(根号分治+线段树+可持久化线段树)

    题意: 解法: 如果问题可以离线,那么莫队可以直接冲过去,可惜离不得. 每个数最多只有一个>sqrt的质因子,sqrt(2e5)<90, 开90棵线段树分别维护前90个质因子的区间最大指数 ...

  4. bzoj 4771: 七彩树 树链的并+可持久化线段树

    题目大意: 给定一颗树,询问树中某个点x的子树中与其距离不超过d的所有点中本质不同的颜色数 强制在线 题解: 一下午终于把这道题叉掉了. 写了三个算法,前两个都是错的,后一个是%的网上大爷们的题解. ...

  5. 【XSY2720】区间第k小 整体二分 可持久化线段树

    题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...

  6. BZOJ 3221: [Codechef FEB13] Obserbing the tree树上询问( 可持久化线段树 + 树链剖分 )

    树链剖分+可持久化线段树....这个一眼可以看出来, 因为可持久化所以写了标记永久化(否则就是区间修改的线段树的持久化..不会), 结果就写挂了, T得飞起...和管理员拿数据调后才发现= = 做法: ...

  7. 7.30集训——线段树

    目录 李超线段树 动态开点线段树 可持久化线段树(主席树) 启发式合并 luogu P3372线段树模板 #include<bits/stdc++.h> #define MAXN 1000 ...

  8. [APIO2018] New Home 新家(线段树,二分答案,离散化)

    [APIO2018] New Home 新家 Solution 对于时间轴我们直接离散化+扫描线,维护每一个商店的加入和删除. 对于询问(x,t)(x,t)(x,t),不好直接回答,这里的关键一步是: ...

  9. CF1045G AI robots(动态开点线段树)

    题意 火星上有$N$个机器人排成一行,第$i$个机器人的位置为$x_{i}$,视野为$r_{i}$,智商为$q_{i}$.我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i} ...

最新文章

  1. JS实现复制到剪切板效果
  2. osg 倾斜数据纹理_高科技构筑逼真效果——无人机倾斜摄影技术在实景三维建模的应用及展望...
  3. Docker Registry本地私有仓库搭建
  4. BPSK调制下(2,1,3)、(2,1,6)卷积码与QC-LDPC码译码性能和抑制突发噪声性能对比(MATLAB实现)
  5. 远程上传下载文件-Xftp5
  6. java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View...错误原因和解决方法
  7. Kafka核心源码解析 - KafkaController源码解析
  8. oracle+buffer+busy+wait,Oracle数据库buffer busy wait等待事件 (2)
  9. c #include如何找到文件_使用 MATLAB Function 模块集成 C 代码
  10. SQL常见错误及处理方法
  11. paip.语义分析--单字动词表.txt
  12. HCIP 2020 8月 自考题库全解析附题库2种版本+练习软件
  13. 子网掩码-掩码位-反掩码 对照表
  14. 支付宝账号转账/扫码即可到转账页
  15. 史上讲解最好的 Docker 教程,从入门到精通(建议收藏的教程)
  16. 中断机制及ZCU102 DMA中断实例
  17. Linux GccGcc-c++安装
  18. svg配合css3动画_如何使用CSS制作节日SVG图标动画
  19. 运筹学——运输问题数学模型
  20. win11微软账户登录一直转圈怎么解决?win11微软账户登录一直转圈

热门文章

  1. 如何用matlab消除谐波,如何在含有整次谐波和非整次谐波的信号中去除整次谐波?...
  2. 父类可以调用子类的方法吗_python类的继承、多继承及查找方法顺序
  3. android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现
  4. 初级Java开发工程师!绝密文档,面试手册全面突击!!!秋招已经到来
  5. php框架快速入门,php-laravel4.0框架 简单快速入门
  6. 单片微型计算机系统应用和开发特点,单片微机原理与应用(第2版)
  7. 五年级计算机下册工作计划,五年级下学期工作计划
  8. excel同一单元格怎么换行_excel表格内怎么换行 方法有两种 一看就会 新手教程...
  9. 机器学习之数据预处理——归一化,标准化
  10. 算法设计与分析——贪心算法——背包问题