http://www.lydsy.com/JudgeOnline/problem.php?id=4103

对长的那一维建可持久化trie树(主席树?)

最主要的思路是对短的那一维每一位暴力,每一位都记录分别匹配到了trie上的哪两个点(区间左开右闭,所以两个点)。

时间复杂度\(O(np\log m)\)。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N = 300003; struct node {int ch[2], s;} T[N * 32];
int cnt = 0, root[N], x[1003], y[N], n, m, tl[1003], tr[1003]; void update(int &pos, int num, int tmp) {
T[++cnt] = T[pos]; pos = cnt; ++T[pos].s;
if (tmp == -1) return;
update(T[pos].ch[(num >> tmp) & 1], num, tmp - 1);
} int query(int u, int d, int k, int tmp) {
if (tmp == -1) return 0;
if (tmp == 2) {
++tmp; --tmp;
}
int s = 0, v;
for (int i = u; i <= d; ++i) {
v = ((x[i] >> tmp) & 1) ^ 1;
s += T[T[tr[i]].ch[v]].s - T[T[tl[i]].ch[v]].s;
}
if (s >= k) {
for (int i = u; i <= d; ++i) {
v = ((x[i] >> tmp) & 1) ^ 1;
tl[i] = T[tl[i]].ch[v];
tr[i] = T[tr[i]].ch[v];
}
return query(u, d, k, tmp - 1) | (1 << tmp);
} else {
k -= s;
for (int i = u; i <= d; ++i) {
v = (x[i] >> tmp) & 1;
tl[i] = T[tl[i]].ch[v];
tr[i] = T[tr[i]].ch[v];
}
return query(u, d, k, tmp - 1);
}
} int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; ++i) scanf("%d", x + i);
for (int i = 1; i <= m; ++i) {
root[i] = root[i - 1];
scanf("%d", y + i);
update(root[i], y[i], 30);
} int p, u, d, l, r, k; scanf("%d", &p);
while (p--) {
scanf("%d%d%d%d%d", &u, &d, &l, &r, &k);
for (int i = u; i <= d; ++i)
tl[i] = root[l - 1], tr[i] = root[r];
printf("%d\n", query(u, d, k, 30));
}
return 0;
}

【BZOJ 4103】【THUSC 2015】异或运算的更多相关文章

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

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

  2. 【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 ...

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

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

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

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

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

    我们观察数据:树套树 PASS    主席树 PASS  一层一个Trie PASS 再看,异或!我们就把目光暂时定在01Tire然后我们发现,我们可以带着一堆点在01Trie上行走,因为O(n*q* ...

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

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

  7. 【BZOJ 4104】【THUSC 2015】解密运算

    http://www.lydsy.com/JudgeOnline/problem.php?id=4104 网上题解满天飞,我也懒得写了 #include<cstdio> #include& ...

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

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

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

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

  10. 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. YII 框架查询

    基础查询 Customer::find()->one();    此方法返回一条数据: Customer::find()->all();    此方法返回所有数据: Customer::f ...

  2. ES6新用法

    ES6 详细参考页面 简介 ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现.一般来说,这两个词是可以互换的. let命令 ES6新增了let命令,用来声明变 ...

  3. html中的meta标签

    1.定义 meta元素提供页面的原信息,位于文档头部 2.必须的属性 content属性 该属性提供名称/值对中的值,使用要与http-equiv或name属性一起使用 3.可选的属性 3.1.htt ...

  4. javascript中的addEventListener与attchEvent

    1.addEventListener 该方法用于向指定元素添加事件句柄 浏览器的支持情况为chrome1.0.ie9+.fireFox1.0.opera7.0 该方法包含三个参数event, func ...

  5. python调参神器hyperopt

    一.安装 pip install hyperopt 二.说明 Hyperopt提供了一个优化接口,这个接口接受一个评估函数和参数空间,能计算出参数空间内的一个点的损失函数值.用户还要指定空间内参数的分 ...

  6. kernel defconfig

    Some defconfig files are placed on below path. Only one *_defconfig can be selected. android/kernel/ ...

  7. python多进程处理数据

    当我们处理大规模数据如ImageNet的时候,单进程显得很吃力耗时,且不能充分利用多核CPU计算机的资源.因此需要使用多进程对数据进行并行处理,然后将结果合并即可.以下给出的是多进程处理的demo代码 ...

  8. python内建方法

    abs all any apply basestring bin bool buffer bytearray bytes callable chr classmethod cmp coerce com ...

  9. HTML5API(2)

    四.文件API 1.概述 H5允许JS有条件的读取客户端文件 允许读取的文件:1.待上传的文件2.拖进浏览器的文件 多文件上传设置属性multiple 过滤上传文件类型 设置accept属性 acce ...

  10. Linux Python apache的cgi配置

    一.找到安装Apache的目录/usr/local/apache2/conf,并对httpd.conf配置文件进行修改 1.加载cgi模块 去掉注释: LoadModule cgid_module m ...