BZOJ4103 异或运算
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,分别表示两个数列的长度
Output
共p行,每行包含一个非负整数,表示此次询问的答案。
Sample Input
1 2 4
7 6 5
3
1 2 1 2 2
1 2 1 3 4
2 3 2 3 4
Sample Output
5
1
HINT
对于100%的数据,0<=Xi,Yj<2^31,
- #include<bits/stdc++.h>
- using namespace std;
- template <class _T> inline void read(_T &_x) {
- int _t; bool flag = false;
- while ((_t = getchar()) != '-' && (_t < '' || _t > '')) ;
- if (_t == '-') _t = getchar(), flag = true; _x = _t - '';
- while ((_t = getchar()) >= '' && _t <= '') _x = _x * + _t - '';
- if (flag) _x = -_x;
- }
- typedef long long LL;
- const int maxn = ;
- const int maxm = ;
- const int DEP = ;
- struct Trie {
- int v, ch[];
- }t[maxm * ];
- int n, m, p, cnt;
- int root[maxm], X[maxn], Y[maxm];
- int Query(int u, int d, int l, int r, int K) {
- static int lr[maxn], rr[maxn];
- for (int i = u; i <= d; ++i)
- lr[i] = root[l - ], rr[i] = root[r];
- int res = , tot;
- for (int i = DEP; i >= ; --i) {
- tot = ;
- for (int j = u, x; j <= d; ++j) {
- x = ((X[j] >> i) & ) ^ ;
- tot += t[t[rr[j]].ch[x]].v - t[t[lr[j]].ch[x]].v;
- }
- if (tot >= K) {
- for (int j = u, x; j <= d; ++j) {
- x = ((X[j] >> i) & ) ^ ;
- rr[j] = t[rr[j]].ch[x];
- lr[j] = t[lr[j]].ch[x];
- }
- res += << i;
- } else {
- for (int j = u, x; j <= d; ++j) {
- x = ((X[j] >> i) & );
- rr[j] = t[rr[j]].ch[x];
- lr[j] = t[lr[j]].ch[x];
- }
- K -= tot;
- }
- }
- return res;
- }
- void update(int r1, int &r2, int v, int dep) {
- t[r2 = ++cnt] = t[r1], ++t[r2].v;
- if (dep < ) return ;
- update(t[r1].ch[(v >> dep) & ], t[r2].ch[(v >> dep) & ], v, dep - );
- }
- int main() {
- //freopen("4103.in", "r", stdin);
- //freopen("4103.out", "w", stdout);
- read(n), read(m);
- for (int i = ; i <= n; ++i) read(X[i]);
- for (int i = ; i <= m; ++i)
- read(Y[i]), update(root[i - ], root[i], Y[i], DEP);
- read(p);
- for (int i = , u, d, l, r, k; i <= p; ++i) {
- read(u), read(d), read(l), read(r), read(k);
- printf("%d\n", Query(u, d, l, r, k));
- }
- return ;
- }
BZOJ4103 异或运算的更多相关文章
- [BZOJ4103][Thu Summer Camp 2015]异或运算 可持久化Trie树
4103: [Thu Summer Camp 2015]异或运算 Time Limit: 20 Sec Memory Limit: 512 MB Description 给定长度为n的数列X={x1 ...
- 网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.
本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 这里简单的说一下我的环境:Win7 32位,Qt creator 5.4.1 编译器 ...
- C、C++、Java异或运算交换变量变量值的区别
今天看到一位大神的博客,深受感触.决定也发一篇博客,证明一下我还活着. 于是我翻看以前学习时做的一些笔记,整理了一下,得到了一个关于异或运算交换变量变量值的笔记. 首先来看下面三组表达式,看起来他们都 ...
- HDOJ 1287 破译密码(异或运算)
Problem Description 有个叫"猪头帮"的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符:现在还知道他们加密的方法是:只用一个大写字 ...
- hdu2095 像水题的不错题 异或运算
异或运算的基础有点忘记了 先介绍一下..2个数异或 就是对于每一个二进制位进行位运算 具有2个特殊的性质 1.一个数异或本身恒等于0,如5^5恒等于0: 2.一个数异或0恒等于本身,如5^0恒等于5. ...
- bis和bic命令实现或和异或运算
从20世纪70年代末到80年代末,Digital Equipment的VAX计算机是一种非常流行的机型.它没有布尔运算AND和OR指令,只有bis(位设置)和bic(位清除)这两种指令.两种指令的输入 ...
- 二进制按位与(&) 按位或(|) 异或运算(^)
1.参加运算的两个数据,按照二进制进行按位与的运算. 运算规则:0&0=0; 0&1=0; 1&0=0; 1&1=1; 即:两位同时为“1”,结果才为 ...
- 基于c#的windows基础设计(学习日记1)【关于异或运算】
第一次接触异或运算,总体来说比哈希算法简单的多,无论是理解还是代码的难易度,唯一不好的是在固定了密钥之后,随机性就小了很多,所以安全性比起哈希算法还是有所差距. 原理在网站上很多都有所以就不再赘述了. ...
- MATLAB:图像的与、或、非、异或逻辑运算(&、|、~、xor)
图像的与.或.非.异或逻辑运算涉及到了&.|.~和xor符号 close all;%关闭当前所有图形窗口,清空工作空间变量,清除工作空间所有变量 clc; clear all; I=imrea ...
随机推荐
- 基于tensorflow 1.x 的检索机器人chatbot-retrieval
Chatbot-retrieval说基于tensorflow的检索机器人,原版的代码路径是 https://github.com/dennybritz/chatbot-retrieval, 但是在te ...
- Git多人协作工作流程
前言 之前一直把Git当做个人版本控制的工具使用,现在由于工作需要,需要多人协作维护文档,所以去简单了解了下Git多人协作的工作流程,发现还真的很多讲解的,而且大神也已经讲解得很清楚了,这里就做一个简 ...
- 《Linux内核设计与实现》第一二章读书笔记
第一章 Linux内核简介 1.Unix简介 (一)概念:支持抢占式多任务.多进程.虚拟内存.换页.动态链接和TCP/IP网络的现代化操作系统. (二)Unix特点(层次化结构): Unix很简洁,仅 ...
- 第二个Sprint冲刺第三天(燃尽图)
- An ''all'' model group must appear in a particle with...问题解决记录
场景: 最近在一个新项目的依赖包调整过程中,引入包之后,发现项目启动报错,一直启动不成功,经过查询和排查,发现是包对xml解析冲突的问题: 报错信息: [WARNING] Nested in org. ...
- Drools解决积分问题
http://blog.csdn.net/quzishen/article/details/6163012 http://www.cnblogs.com/ityouknow/p/7297524.htm ...
- [Delphi]实现使用TIdHttp控件向https地址Post请求[转]
开篇:公司之前一直使用http协议进行交互(比如登录等功能),但是经常被爆安全性不高,所以准备改用https协议.百度了一下资料,其实使用IdHttp控件实现https交互的帖子并不少,鉴于这次成功实 ...
- String js删除字符串的最后一个字符三种方法
字符串 var basic = "abc,def,ghi,"; 第一种 basic = basic.substr(0, basic.length - 1); 第二种 basic = ...
- JIRA部署破解和confluence整合
JIRA是一个项目跟踪管理工具,帮助团队创建计划任务.构建并发布优秀的产品.全球成千上万的团队选择JIRA,用JIRA来捕获.组织管理缺陷.分配任务,跟踪团队的活动.不论在桌面PC还是移动终端设备上, ...
- 【版本管理】git分支管理
创建与合并分支: 首先,我们创建dev分支,然后切换到dev分支: git checkout -b dev,命令加上-b参数表示创建并切换, 相当于以下两条命令: git branch dev: gi ...