我们观察数据:树套树 PASS    主席树 PASS  一层一个Trie PASS

再看,异或!我们就把目光暂时定在01Tire然后我们发现,我们可以带着一堆点在01Trie上行走,因为O(n*q*30+m*30)是一个可选复杂度。

我们想一下我们正常的时候的01Trie其实是通过在每一层比较大小来确定这一为是0还是1,所以我们从上到下一位一位地走,统计每在这一位异或值为1的数的个数,如果这一位是一的个数大于k那么我们就使这一位为1,那么我们就舍弃这一位为0的状态就是所有的点都走变为1的路,如果这一位是一的个数小于k那么我们就使这一位为0,其余同理。

#include <cstdio>
using namespace std;
const int A=,MAXN=,N=,M=;
inline void read(int &sum){
register char ch=getchar();
for(sum=;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=(sum<<)+(sum<<)+ch-'',ch=getchar());
}
struct Trie{
Trie *ch[];int size;
}*root[M],*null,node[MAXN],*now[N][];
int n,m,sz=,a[N];
int main(){
null=node,null->ch[]=null->ch[]=null,root[]=null;
read(n),read(m);for(register int i=;i<=n;i++)read(a[i]);
for(register int i=,x;i<=m;i++){
read(x),root[i]=node+sz,sz++;register Trie *p=root[i],*last=root[i-];
for(register int i=A;i>=;i--)
p->ch[(x>>i)&]=node+sz,sz++,p->ch[((x>>i)&)^]=last->ch[((x>>i)&)^],
p=p->ch[(x>>i)&],last=last->ch[(x>>i)&],p->size=last->size+;
}
register int u,d,l,r,k,Q;
read(Q);while(Q--){
read(u),read(d),read(l),read(r),read(k);register int ret=;
for(register int i=u;i<=d;i++)now[i][]=root[r],now[i][]=root[l-];
for(register int i=A,sum=;i>=;i--,sum=){
for(register int j=u;j<=d;j++)
sum+=((a[j]>>i)&)==?(now[j][]->ch[]->size-now[j][]->ch[]->size):(now[j][]->ch[]->size-now[j][]->ch[]->size);
if(sum>=k){
ret|=<<i;for(register int j=u;j<=d;j++)
now[j][]=now[j][]->ch[((a[j]>>i)&)^],now[j][]=now[j][]->ch[((a[j]>>i)&)^];
}else{
k-=sum;for(register int j=u;j<=d;j++)
now[j][]=now[j][]->ch[(a[j]>>i)&],now[j][]=now[j][]->ch[(a[j]>>i)&];
}
}printf("%d\n",ret);
}return ;
}

【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie的更多相关文章

  1. BZOJ 4103: [Thu Summer Camp 2015]异或运算 可持久化trie

    开始想了一个二分+可持久化trie验证,比正解多一个 log 仔细思考,你发现你可以直接按位枚举,然后在可持久化 trie 上二分就好了. code: #include <bits/stdc++ ...

  2. [BZOJ 4103] [Thu Summer Camp 2015] 异或运算 【可持久化Trie】

    题目链接:BZOJ - 4103 题目分析 THUSC滚粗之后一直没有写这道题,从来没写过可持久化Trie,发现其实和可持久化线段树都是一样的.嗯,有些东西就是明白得太晚. 首先Orz ZYF-ZYF ...

  3. 【BZOJ 4103】 4103: [Thu Summer Camp 2015]异或运算 (可持久化Trie)

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 474  Solved: 258 De ...

  4. [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树

    4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...

  5. 【bzoj4103】[Thu Summer Camp 2015]异或运算 可持久化trie树

    Description 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor yj,每次询问给定矩形区域i ...

  6. BZOJ 4103 [Thusc 2015]异或运算 (可持久化01Trie+二分)

    题目大意:给你一个长方形矩阵,位置$i,j$上的数是$a_{i}\;xor\;b_{j}$,求某个子矩阵内第$K$大的值 最先想的是二分答案然后验证,然而是$O(qnlogmloga_{i})$,不出 ...

  7. bzoj4103: [Thu Summer Camp 2015]异或运算

    对于每个询问暴力枚举x~y,然后在Trie去找第k大,开始我写了个二分答案然后算比当前答案大的个数,打了个第10个点的表就跑出19s+比bzoj垫底还慢4s+ 然而不用二分,直接1000个点一起在树上 ...

  8. BZOJ4103 [Thu Summer Camp 2015]异或运算 【可持久化trie树】

    题目链接 BZOJ4103 题解 一眼看过去是二维结构,实则未然需要树套树之类的数据结构 区域异或和,就一定是可持久化\(trie\)树 观察数据,\(m\)非常大,而\(n\)和\(p\)比较小,甚 ...

  9. bzoj4103 [Thu Summer Camp 2015]异或运算(可持久化trie)

    内存限制:512 MiB 时间限制:1000 ms 题目描述 给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi ...

随机推荐

  1. hive 学习系列二(数据库的创建删除修改) 拿走,不谢。

    database 相当于一个目录或者命名空间,用来更好地进行表的管理 在hdfs 的目录位置大致如下: [root@iZbp12vtv76y9q3d633bh6Z /]# hadoop fs -ls ...

  2. Hadoop参数调优

    转自:http://blog.sina.com.cn/s/blog_6a67b5c50100vop9.html dfs.block.size 决定HDFS文件block数量的多少(文件个数),它会间接 ...

  3. AWS安装CDH5.3-CentOS6.4中关键操作步骤

    1.在AWS masternode 上下载cloudera-manager-installer.bin安装包 [root@ip-172-21-42-114 ~]# wget http://archiv ...

  4. FPGA的嵌入式乘法器

    1. FPGA主要应用在并行处理资源的应用,视频与图像处理,无线通信的中频调制解调器. 嵌入式乘法器可以配置成一个 18 × 18 乘法器,或者配置成两个 9 × 9 乘法器.对于那些大于18 × 1 ...

  5. guacamole实现虚拟键盘

    要做的事情比较简单,就是先实例化一个虚拟键盘,然后监听事件即可. js代码 //虚拟键盘数据 var a = {"language":"en_US"," ...

  6. Log4net 根据日志类别保存到不同的文件,并按照日期生成不同文件名称

    <configuration> <configSections> <!--日志记录--> <section name="log4net" ...

  7. Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)

    断网了2天  今天补上     聚合操作: 对文档的信息进行整理统计的操作 返回:统计后的文档集合 db.collection.aggregate() 功能:聚合函数,完成聚合操作 参数:聚合条件,配 ...

  8. 给移动硬盘安装rhel7

    本机是win8.1的系统,但不想给电脑装双系统,所以想给移动硬盘里安装rhel7移动硬盘是750G的在网上搜了很多方法,我采取了两个方法:方法一.1.取一个U盘,用软碟通把rhel7的iso文件写进了 ...

  9. 维特比算法(Viterbi)及python实现样例

    维特比算法(Viterbi) 维特比算法 维特比算法shiyizhong 动态规划算法用于最可能产生观测时间序列的-维特比路径-隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔科夫模型中.术语“维特 ...

  10. Sping工作原理

    一. IoC(Inversion of control): 控制反转 1.IoC: 概念:控制权由对象本身转向容器:由容器根据配置文件去创建实例并创建各个实例之间的依赖关系 核心:bean工厂:在Sp ...