可持久化trie树?好像和可持久化权值线段树差不多。。

如果这题没有那个\(x[i]\)这题就是一个裸的可持久化trie树。

仔细想想,多了这个\(x[i]\)之后有什么影响?

就是我们查询区间的时候区间的两个端点减去一个\(x[i]\)就行了。

但是这样我们查询的可能不是树上的一个节点了,我们在树上二分的时候每一次都要调用一次查询的函数。

复杂度多一个\(log\)可以接受。

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. #include<cstdio>
  5. #include<algorithm>
  6. using namespace std;
  7. const int N=250000;
  8. int n,m,tot,sum[N*30],ch[N*30][2],root[N];
  9. void build(int l,int r,int &now){
  10. now=++tot;
  11. if(l==r)return;
  12. int mid=(l+r)>>1;
  13. build(l,mid,ch[now][0]);
  14. build(mid+1,r,ch[now][1]);
  15. }
  16. void ins(int l,int r,int x,int pre,int &now){
  17. now=++tot;
  18. sum[now]=sum[pre]+1;
  19. if(l==r)return;
  20. int mid=(l+r)>>1;
  21. ch[now][1]=ch[pre][1];
  22. ch[now][0]=ch[pre][0];
  23. if(x>mid)ins(mid+1,r,x,ch[pre][1],ch[now][1]);
  24. else ins(l,mid,x,ch[pre][0],ch[now][0]);
  25. }
  26. int getsum(int l,int r,int L,int R,int pre,int now){
  27. if(L>R)return 0;
  28. if(l==L&&r==R){
  29. return sum[now]-sum[pre];
  30. }
  31. int mid=(l+r)>>1;
  32. if(L>mid)return getsum(mid+1,r,L,R,ch[pre][1],ch[now][1]);
  33. else if(R<=mid)return getsum(l,mid,L,R,ch[pre][0],ch[now][0]);
  34. else return getsum(l,mid,L,mid,ch[pre][0],ch[now][0])+
  35. getsum(mid+1,r,mid+1,R,ch[pre][1],ch[now][1]);
  36. }
  37. int check(int x,int y,int pre,int now){
  38. int ans=0;
  39. for(int i=17;i>=0;i--){
  40. int t=ans+((1^((x>>i)&1))<<i);
  41. if (getsum(0,99999,max(0,t-y),min(t+(1<<i)-1-y,99999),pre,now))ans=t;
  42. else ans+=((x>>i)&1)<<i;
  43. }
  44. return ans;
  45. }
  46. int read(){
  47. int sum=0,f=1;char ch=getchar();
  48. while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
  49. while(ch>='0'&&ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
  50. return sum*f;
  51. }
  52. int main(){
  53. n=read();m=read();
  54. build(0,99999,root[0]);
  55. for(int i=1;i<=n;i++){
  56. int a=read();
  57. ins(0,99999,a,root[i-1],root[i]);
  58. }
  59. while(m--){
  60. int b=read(),x=read(),l=read(),r=read();
  61. printf("%d\n",check(b,x,root[l-1],root[r])^b);
  62. }
  63. return 0;
  64. }

[SCOI2016]美味(可持久化线段树)的更多相关文章

  1. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  2. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

  3. 【BZOJ-2653】middle 可持久化线段树 + 二分

    2653: middle Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1298  Solved: 734[Submit][Status][Discu ...

  4. HDU 4866 Shooting(持久化线段树)

    view code//第二道持久化线段树,照着别人的代码慢慢敲,还是有点不理解 #include <iostream> #include <cstdio> #include & ...

  5. 【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树

    3653: 谈笑风生 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 628  Solved: 245[Submit][Status][Discuss] ...

  6. 【BZOJ3673】&&【BZOJ3674】: 可持久化并查集 by zky 可持久化线段树

    没什么好说的. 可持久化线段树,叶子节点存放父亲信息,注意可以规定编号小的为父亲. Q:不是很清楚空间开多大,每次询问父亲操作后修改的节点个数是不确定的.. #include<bits/stdc ...

  7. 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队

    看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...

  8. 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之

    最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...

  9. 【BZOJ 3524】【Poi2014】Couriers 可持久化线段树

    为什么这个主席树叫可持久化线段树,我不知道,具体得问达神.我无限T,然后DaD3zZ一针见血地指出了我的N*50爆内存导致无限编译超时O)ZO)ZO)Z真是太神啦.以图为鉴: 达神题解传送门:http ...

随机推荐

  1. Python多线程原理与实现

    Date: 2019-06-04 Author: Sun Python多线程原理与实战 目的: (1)了解python线程执行原理 (2)掌握多线程编程与线程同步 (3)了解线程池的使用 1 线程基本 ...

  2. JS判断客户端是否是iOS或者Android或者ipad(一)

    通过判断浏览器的userAgent,用正则来判断是否是ios和Android客户端.代码如下<script type="text/javascript"> var u ...

  3. spring的JdbcTemplate

    一.首先配置JdbcTemplate: 要使用Jdbctemplate 对象来完成jdbc 操作.通常情况下,有三种种方式得到JdbcTemplate 对象.       第一种方式:我们可以在自己定 ...

  4. 路飞学城Python-Day40(第四模块复习题)

    数据库 一.简答题 1.说说你所知道的MySQL数据库存储引擎,InnoDB存储引擎和MyISM存储引擎的区别? 1.InnoDB存储引擎(MySQL默认存储引擎),支持事务,其设计目标主要面向联机事 ...

  5. sklearn学习3----模型选择和评估(1)训练集和测试集的切分

    来自链接:https://blog.csdn.net/zahuopuboss/article/details/54948181 1.sklearn.model_selection.train_test ...

  6. frp(升级版)教程

    注:之前的教程是按照官网文档亲自实践操作汇总而成的,所需的软件也是从官网下载的. 但是有一个问题,若是运行在有公网IP的frps程序被其他人所知道,他们就可以直接在他们电脑上运行frpc客户端, 简而 ...

  7. 升级ruby到2.0

    本文部分内容转载,如侵犯个人利益请联系博客管理员及时删除,或留言之评论区 一.安装库 Yum install –y gcc* openssl* wget 二.安装ruby wget https://c ...

  8. 用pycharm运行django项目

    [点击]run -> Edit Configrations 弹出如下页面 点击“+” 点击Django server 在弹出页面的host填0.0.0.0 点击这个“文件夹” 点击‘+’后填下面 ...

  9. 通过wget下载jdk

    wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-co ...

  10. ExcelToHtmlTable转换算法:将Excel转换成Html表格并展示(项目源码+详细注释+项目截图)

    功能概述 Excel2HtmlTable的主要功能就是把Excel的内容以表格的方式,展现在页面中.Excel的多个Sheet对应页面的多个Tab选项卡.转换算法的难点在于,如何处理行列合并,将Exc ...