我们观察数据:树套树 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=30,MAXN=12000000,N=1010,M=300010;
inline void read(int &sum){register char ch=getchar();for(sum=0;ch<'0'||ch>'9';ch=getchar());for(;ch>='0'&&ch<='9';sum=(sum<<1)+(sum<<3)+ch-'0',ch=getchar());
}
struct Trie{Trie *ch[2];int size;
}*root[M],*null,node[MAXN],*now[N][2];
int n,m,sz=1,a[N];
int main(){null=node,null->ch[0]=null->ch[1]=null,root[0]=null;read(n),read(m);for(register int i=1;i<=n;i++)read(a[i]);for(register int i=1,x;i<=m;i++){read(x),root[i]=node+sz,sz++;register Trie *p=root[i],*last=root[i-1];for(register int i=A;i>=0;i--)p->ch[(x>>i)&1]=node+sz,sz++,p->ch[((x>>i)&1)^1]=last->ch[((x>>i)&1)^1],p=p->ch[(x>>i)&1],last=last->ch[(x>>i)&1],p->size=last->size+1;}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=0;for(register int i=u;i<=d;i++)now[i][1]=root[r],now[i][0]=root[l-1];for(register int i=A,sum=0;i>=0;i--,sum=0){for(register int j=u;j<=d;j++)sum+=((a[j]>>i)&1)==0?(now[j][1]->ch[1]->size-now[j][0]->ch[1]->size):(now[j][1]->ch[0]->size-now[j][0]->ch[0]->size);if(sum>=k){ret|=1<<i;for(register int j=u;j<=d;j++)now[j][1]=now[j][1]->ch[((a[j]>>i)&1)^1],now[j][0]=now[j][0]->ch[((a[j]>>i)&1)^1];}else{k-=sum;for(register int j=u;j<=d;j++)now[j][1]=now[j][1]->ch[(a[j]>>i)&1],now[j][0]=now[j][0]->ch[(a[j]>>i)&1];}}printf("%d\n",ret);}return 0;
}

转载于:https://www.cnblogs.com/TSHugh/p/7281862.html

【BZOJ 4103】 [Thu Summer Camp 2015]异或运算 可持久化01Trie相关推荐

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

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

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

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

  3. 不占用多余空间实现值的交换——异或运算

    首先什么是异或运算? ^规则: 0 ^ x = x x ^ x = 0 那么 a 与 b 交换值如何做呢???三行代码

  4. C 关于使用异或运算操作概述

    对于异或运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中,前后共需要三次内存写入操作. 异或运算可以达到交换两数的目的,代码如下: void swap(int &am ...

  5. 训练三层BP神经网络实现异或运算 Python 代码实现

    本文主要使用下面的网络结构来完成 异或运算 异或运算 : 0^0 = 0, 1^0 = 1, 0^1 = 1, 1^1 = 0 . 上图的公式推导可以参考博文: 三层神经网络前向后向传播示意图 imp ...

  6. 大脑只需单个神经元就可进行XOR异或运算,Science新研究揭开冰山一角,引发热议...

    边策 赖可 发自 凹非寺 量子位 报道 | 公众号 QbitAI 在机器学习中,异或(XOR)这样的非线性问题一直需要多层神经网络来解决.科学家一直以为,即使在人类大脑中,XOR运算也需要多层神经元网 ...

  7. 尼姆博奕 (Nimm Game) 异或运算;

    讲到博弈,不得不讲异或运算, 我真服了 大神了, 怎么会将博弈和二进制联系到一起,  大写的服! 异或运算 ^    原理就是  二进制形式,对于相应的每一位  相同 为0 不同为1 ; 简单理解就是 ...

  8. 关于一些运算((与运算)、|(或运算)、^(异或运算)........)的本质理解【转】...

    看到一篇博客,关于一些运算的解析,觉得有用,怕以后找不着,直接复制下来,以备以后学习用 原文链接:https://blog.csdn.net/xiaopihaierletian/article/det ...

  9. FEC之异或运算应用

    话说为啥FEC需要异或( ^/⊕ )操作呢? 异或:xor 异或运算规则: 0 xor 0 = 0 0 xor 1 = 1 1 xor 0 = 1 1 xor 1 = 0 异或运算特性: 1). a ...

最新文章

  1. npm install 提示权限不足 Error: EPERM: operation not permitted, unlink XXX
  2. 石川es6课程---7、数组
  3. THANATOS数据库(自噬调节相关蛋白及其翻译后修饰信息数据库)使用指南
  4. LeetCode之Sum of Left Leaves
  5. Loading 遮蔽层 简单实现。
  6. 跟我学Shiro目录贴
  7. ole db 错误 通讯链接失败_西门子PLC1200的S7通讯(同一项目下)--GET接收指令
  8. 你不知道的Chrome调试技巧
  9. mysql linux压缩包官网下载_mysql for linux 压缩包下载
  10. NOIp2017 题解
  11. 千万级中文公开免费聊天语料数据分享
  12. Yolov5环境配置 配不好来打我
  13. 免费申请.tk国际顶级域名-攻略
  14. vc实现魔兽3改键程序
  15. Python 通过adb传输文件到手机
  16. HEDY七喜MX-717播放视频AMV攻略(原创)
  17. 达梦数据库DCA培训心得
  18. IDEA中打jar包的两种方式
  19. ORACLE去重总结
  20. 响铃:抖音要做春晚二级赞助商,这营销靠谱吗?

热门文章

  1. 【PAT - 甲级1155】Heap Paths (30分)(栈,dfs,二叉树)
  2. 【CodeForces - 349A】Cinema Line (贪心(其实不是贪心),乱搞)
  3. java ee 6 源码_Java EE 6开发手册·高级篇(第4版)
  4. lua进入压缩包_使用lua语言制作贪吃蛇游戏(love2d)(一)开发环境的搭建
  5. 局域网服务器文件夹隐藏,局域网服务器共享文件夹访问权限设置win7隐藏无权限共享文件夹方法.docx...
  6. tomcat上传文件到不同服务器,使用SpringMVC进行跨服务器上传文件出现的那些坑
  7. Linux下配置OpenLDAP服务记录
  8. (多线程)leetcode1116. 打印零与奇偶数
  9. leetcode340. 至多包含 K 个不同字符的最长子串
  10. leetcode85. 最大矩形