关闭

【集训队作业】XRQRS

239人阅读 评论(0) 收藏 举报
分类:

题目大意

现要求维护一个序列(初始为空),要求实现m个操作,包括以下几种。

  • 在序列末尾添加一个数x
  • 删除数列末尾的x个数
  • 询问[l,r)区间中所有数与x异或,取得最大值的数
  • 查询[l,r)区间中的第x小数
  • 查询[l,r)区间中,小于等于x的数的个数

m5×105,5×105


分析

找区间第k小,小于等于某个数的个数,以及异或最值,可以分别用可持久化线段树以及可持久化trie简单地解决。

那么这道题就基本上解决了。

我们维护一个栈,表示当前的序列。

对于操作1,添加一个数,则在当前序列末尾的数据结构基础上修改,将这个数压入栈中,并将新建的这个修改后的数据结构指向新加入的数。
对于操作2,删除x个数,直接弹栈就可以了。
对于操作3,4,5就是经典的可持久化数据结构的应用了。这里就不赘述了。

时间复杂度O(mlogn)
空间复杂度O(mlogn)

0
0
猜你在找
【直播】计算机视觉原理及实战—屈教授
【套餐】深度学习入门视频课程—唐宇迪
【套餐】Hadoop生态系统零基础入门--侯勇蛟
【套餐】嵌入式Linux C编程基础--朱有鹏
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】机器学习之凸优化——马博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:43504次
    • 积分:1610
    • 等级:
    • 排名:千里之外
    • 原创:116篇
    • 转载:0篇
    • 译文:0篇
    • 评论:19条
    最新评论