开始想了一个二分+可持久化trie验证,比正解多一个 log

仔细思考,你发现你可以直接按位枚举,然后在可持久化 trie 上二分就好了.

code:

#include <bits/stdc++.h>
#define N 700005
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
int n,m,tot,tl,tr;
int ch[N*30][2],cnt[N*30],xx[N],yy[N],rt[N],t1[N],t2[N];
void insert(int pre,int &x,int v)
{
int now=x=++tot;
for(int i=30;i>=0;--i)
{
int o=((v>>i)&1);
ch[now][o^1]=ch[pre][o^1];
ch[now][o]=++tot;
pre=ch[pre][o];
now=ch[now][o];
cnt[now]=cnt[pre]+1;
}
}
int query(int L,int R,int kth,int len)
{
if(len<0) return 0;
int re=0,cur=1,i;
for(cur=1,i=L;i<=R;++i,++cur)
{
int o=((xx[i]>>len)&1);
re+=cnt[ch[t2[cur]][o^1]]-cnt[ch[t1[cur]][o^1]];
}
if(kth<=re)
{
for(cur=1,i=L;i<=R;++i,++cur)
{
int o=((xx[i]>>len)&1);
t1[cur]=ch[t1[cur]][o^1];
t2[cur]=ch[t2[cur]][o^1];
}
return (1<<len)+query(L,R,kth,len-1);
}
else
{
for(cur=1,i=L;i<=R;++i,++cur)
{
int o=((xx[i]>>len)&1);
t1[cur]=ch[t1[cur]][o];
t2[cur]=ch[t2[cur]][o];
}
return query(L,R,kth-re,len-1);
}
}
int main()
{
// setIO("input");
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;++i) scanf("%d",&xx[i]);
for(i=1;i<=m;++i)
{
scanf("%d",&yy[i]);
insert(rt[i-1],rt[i],yy[i]);
}
int q;
scanf("%d",&q);
while(q--)
{
int a,b,c,d,k;
scanf("%d%d%d%d%d",&a,&b,&c,&d,&k);
tl=tr=0;
for(i=a;i<=b;++i) t1[++tl]=rt[c-1],t2[tl]=rt[d];
printf("%d\n",query(a,b,k,30));
}
return 0;
}

  

BZOJ 4103: [Thu Summer Camp 2015]异或运算 可持久化trie的更多相关文章

  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. [BZOJ 4103] [Thu Summer Camp 2015] 异或运算 【可持久化Trie】

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

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

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

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

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

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

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

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

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

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

  9. bzoj:4105: [Thu Summer Camp 2015]平方运算

    Description   Input 第一行有三个整数N,M,p,分别代表序列的长度.平方操作与询问操作的总次数以及在平方操作中所要模的数.   接下来一行N个数代表一开始的序列{X1,X2,... ...

随机推荐

  1. go 指针 通过指针修改int类型的值

    指针的定义 :var p *int 取指针的值 :*p ------------------------------------------------------------------------ ...

  2. golang在linux下的安装操作

  3. 【实战经验】--Xilinx--IPcore--PLL生成

    用途: PLL用于产生自己想要的时钟,可以倍频有可以分频,通常倍频. 生成: 1.打开ISE—— Project —— New source,选择IP(CORE Generator & Arc ...

  4. Spring整合Hibernate的两种方式

    在使用spring注解整合hibernate时出现"org.hibernate.MappingException: Unknown entity: com.ssh.entry.Product ...

  5. Ubuntu 固定自己的IP

    使用以下命令 sudo vi /etc/network/interfaces 以下方文件内容进行覆盖 ​# interfaces(5) file used by ifup(8) and ifdown( ...

  6. Spring mvc请求处理流程详解(一)之视图解析

      本文链接:https://blog.csdn.net/lchpersonal521/article/details/53112728 前言 Spring mvc框架相信很多人都很熟悉了,关于这方面 ...

  7. MPAndroid 的学习

    1.MPAndroid 的github的地址: https://github.com/PhilJay/MPAndroidChart#documentation 2.使用步骤: 在build.gradl ...

  8. 【转载】sqlserver中小数类型float和deciaml类型比较

    在sqlserver数据库中,float类型和double类型都可以用来表示小数类型,float类型是一种近似数值的小数类型,而decimal类型则是精确数值的小数类型.如果需要在sqlserver数 ...

  9. Leetcode刷题python

    Two Sum 两数==target 方法二更好 题1,对时间复杂度有要求O(n),所以维护一个字典,遍历过的数值放在字典中,直接遍历时候查找字典中有没有出现差,查找字典时间复杂度是O(1),所以O( ...

  10. 使用PATH变量进行Linux权限升级技巧

    0x00 前言 在解决了几个OSCP挑战之后,我们决定写一篇关于用于Linux权限升级的各种方法的文章,这对我们的读者在其渗透测试项目中有所帮助.在本文中,我们将学习“使用$path变量的各种方法”以 ...