4103: [Thu Summer Camp 2015]异或运算

Time Limit: 20 Sec  Memory Limit: 512 MB

Description

给定长度为n的数列X={x1,x2,...,xn}和长度为m的数列Y={y1,y2,...,ym},令矩阵A中第i行第j列的值Aij=xi xor  yj,每次询问给定矩形区域i∈[u,d],j∈[l,r],找出第k大的Aij。

Input

第一行包含两个正整数n,m,分别表示两个数列的长度

第二行包含n个非负整数xi
第三行包含m个非负整数yj
第四行包含一个正整数p,表示询问次数
随后p行,每行均包含5个正整数,用来描述一次询问,每行包含五个正整数u,d,l,r,k,含义如题意所述。

Output

共p行,每行包含一个非负整数,表示此次询问的答案。

Sample Input

3 3
1 2 4
7 6 5
3
1 2 1 2 2
1 2 1 3 4
2 3 2 3 4

Sample Output

6
5
1

HINT

对于100%的数据,0<=Xi,Yj<2^31,

1<=u<=d<=n<=1000,
1<=l<=r<=m<=300000,
1<=k<=(d-u+1)*(r-l+1),
1<=p<=500

对n暴力,m建可持久化Trie
BZOJ+1,您的最佳选择

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. template <class _T> inline void read(_T &_x) {
  4. int _t; bool flag = false;
  5. while ((_t = getchar()) != '-' && (_t < '' || _t > '')) ;
  6. if (_t == '-') _t = getchar(), flag = true; _x = _t - '';
  7. while ((_t = getchar()) >= '' && _t <= '') _x = _x * + _t - '';
  8. if (flag) _x = -_x;
  9. }
  10. typedef long long LL;
  11. const int maxn = ;
  12. const int maxm = ;
  13. const int DEP = ;
  14. struct Trie {
  15. int v, ch[];
  16. }t[maxm * ];
  17. int n, m, p, cnt;
  18. int root[maxm], X[maxn], Y[maxm];
  19. int Query(int u, int d, int l, int r, int K) {
  20. static int lr[maxn], rr[maxn];
  21. for (int i = u; i <= d; ++i)
  22. lr[i] = root[l - ], rr[i] = root[r];
  23. int res = , tot;
  24. for (int i = DEP; i >= ; --i) {
  25. tot = ;
  26. for (int j = u, x; j <= d; ++j) {
  27. x = ((X[j] >> i) & ) ^ ;
  28. tot += t[t[rr[j]].ch[x]].v - t[t[lr[j]].ch[x]].v;
  29. }
  30. if (tot >= K) {
  31. for (int j = u, x; j <= d; ++j) {
  32. x = ((X[j] >> i) & ) ^ ;
  33. rr[j] = t[rr[j]].ch[x];
  34. lr[j] = t[lr[j]].ch[x];
  35. }
  36. res += << i;
  37. } else {
  38. for (int j = u, x; j <= d; ++j) {
  39. x = ((X[j] >> i) & );
  40. rr[j] = t[rr[j]].ch[x];
  41. lr[j] = t[lr[j]].ch[x];
  42. }
  43. K -= tot;
  44. }
  45. }
  46. return res;
  47. }
  48. void update(int r1, int &r2, int v, int dep) {
  49. t[r2 = ++cnt] = t[r1], ++t[r2].v;
  50. if (dep < ) return ;
  51. update(t[r1].ch[(v >> dep) & ], t[r2].ch[(v >> dep) & ], v, dep - );
  52. }
  53. int main() {
  54. //freopen("4103.in", "r", stdin);
  55. //freopen("4103.out", "w", stdout);
  56. read(n), read(m);
  57. for (int i = ; i <= n; ++i) read(X[i]);
  58. for (int i = ; i <= m; ++i)
  59. read(Y[i]), update(root[i - ], root[i], Y[i], DEP);
  60. read(p);
  61. for (int i = , u, d, l, r, k; i <= p; ++i) {
  62. read(u), read(d), read(l), read(r), read(k);
  63. printf("%d\n", Query(u, d, l, r, k));
  64. }
  65. return ;
  66. }

BZOJ4103 异或运算的更多相关文章

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

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

  2. 网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.

    本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 这里简单的说一下我的环境:Win7 32位,Qt creator 5.4.1 编译器 ...

  3. C、C++、Java异或运算交换变量变量值的区别

    今天看到一位大神的博客,深受感触.决定也发一篇博客,证明一下我还活着. 于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记. 首先来看下面三组表达式,看起来他们都 ...

  4. HDOJ 1287 破译密码(异或运算)

    Problem Description 有个叫"猪头帮"的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符:现在还知道他们加密的方法是:只用一个大写字 ...

  5. hdu2095 像水题的不错题 异或运算

    异或运算的基础有点忘记了 先介绍一下..2个数异或 就是对于每一个二进制位进行位运算 具有2个特殊的性质 1.一个数异或本身恒等于0,如5^5恒等于0: 2.一个数异或0恒等于本身,如5^0恒等于5. ...

  6. bis和bic命令实现或和异或运算

    从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...

  7. 二进制按位与(&) 按位或(|)  异或运算(^)

    1.参加运算的两个数据,按照二进制进行按位与的运算. 运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1; 即:两位同时为“1”,结果才为 ...

  8. 基于c#的windows基础设计(学习日记1)【关于异或运算】

    第一次接触异或运算,总体来说比哈希算法简单的多,无论是理解还是代码的难易度,唯一不好的是在固定了密钥之后,随机性就小了很多,所以安全性比起哈希算法还是有所差距. 原理在网站上很多都有所以就不再赘述了. ...

  9. MATLAB:图像的与、或、非、异或逻辑运算(&、|、~、xor)

    图像的与.或.非.异或逻辑运算涉及到了&.|.~和xor符号 close all;%关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc; clear all; I=imrea ...

随机推荐

  1. 基于tensorflow 1.x 的检索机器人chatbot-retrieval

    Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...

  2. Git多人协作工作流程

    前言 之前一直把Git当做个人版本控制的工具使用,现在由于工作需要,需要多人协作维护文档,所以去简单了解了下Git多人协作的工作流程,发现还真的很多讲解的,而且大神也已经讲解得很清楚了,这里就做一个简 ...

  3. 《Linux内核设计与实现》第一二章读书笔记

    第一章 Linux内核简介 1.Unix简介 (一)概念:支持抢占式多任务.多进程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统. (二)Unix特点(层次化结构): Unix很简洁,仅 ...

  4. 第二个Sprint冲刺第三天(燃尽图)

  5. An ''all'' model group must appear in a particle with...问题解决记录

    场景: 最近在一个新项目的依赖包调整过程中,引入包之后,发现项目启动报错,一直启动不成功,经过查询和排查,发现是包对xml解析冲突的问题: 报错信息: [WARNING] Nested in org. ...

  6. Drools解决积分问题

    http://blog.csdn.net/quzishen/article/details/6163012 http://www.cnblogs.com/ityouknow/p/7297524.htm ...

  7. [Delphi]实现使用TIdHttp控件向https地址Post请求[转]

    开篇:公司之前一直使用http协议进行交互(比如登录等功能),但是经常被爆安全性不高,所以准备改用https协议.百度了一下资料,其实使用IdHttp控件实现https交互的帖子并不少,鉴于这次成功实 ...

  8. String js删除字符串的最后一个字符三种方法

    字符串 var basic = "abc,def,ghi,"; 第一种 basic = basic.substr(0, basic.length - 1); 第二种 basic = ...

  9. JIRA部署破解和confluence整合

    JIRA是一个项目跟踪管理工具,帮助团队创建计划任务.构建并发布优秀的产品.全球成千上万的团队选择JIRA,用JIRA来捕获.组织管理缺陷.分配任务,跟踪团队的活动.不论在桌面PC还是移动终端设备上, ...

  10. 【版本管理】git分支管理

    创建与合并分支: 首先,我们创建dev分支,然后切换到dev分支: git checkout -b dev,命令加上-b参数表示创建并切换, 相当于以下两条命令: git branch dev: gi ...