博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XOR Queries
阅读量:5291 次
发布时间:2019-06-14

本文共 2445 字,大约阅读时间需要 8 分钟。

XOR Queries

时间限制: 1000ms   内存限制: 256M

描述

    给出一个长度为n的数组C,回答m个形式为(L,R,A,B)的询问,含义为存在多少个不同的数组下标k[L,R]满足C[k]AB(式中为异或运算)。

输入

输入第一行为一个整数T,表示一共有T组测试数据。

对于每组测试数据:
第一行为两个整数nm1n,m50000)。
第二行为n个整数表示数组C0C[i]109)。
接下来m行中,第i行有四个整数LiRiAiBi1LiRin0Ai,Bi109)。

输出

对于每次询问:输出一个整数表示满足条件的数组下标数目。

样例输入1 
15 21 2 3 4 51 3 1 12 5 2 3
样例输出1
22 分析:区间问题很容易想到莫队;    然后有了区间内所有数,怎么查x^a>=b;    考虑异或,建01字典树插入删除查询即可; 代码:
#include 
using namespace std;const int maxn=5e4+10;int n,m,k,t,a[maxn],bel[maxn],tot,cnt,ans[maxn],ch[maxn*31][2],sz[maxn*31],num;long long ret;struct node{ int l,r,id,block,c,d; bool operator<(const node&p)const { return block==p.block?r
=0;i--) { int y=(x>>i&1); if(ch[pos][y]==0) { ch[pos][y]=++num; ch[num][0]=ch[num][1]=0; sz[ch[pos][y]]=0; } sz[ch[pos][y]]++; pos=ch[pos][y]; }}void del(int x){ int pos=0; for(int i=30;i>=0;i--) { int y=(x>>i&1); sz[ch[pos][y]]--; pos=ch[pos][y]; }}int query(int x,int y){ int ret=0,pos=0; for(int i=30;i>=0;i--) { int z=(x>>i&1),w=(y>>i&1); if(w==1) { pos=ch[pos][z^1]; if(i==0)ret+=sz[pos]; } else ret+=sz[ch[pos][z^1]],pos=ch[pos][z]; if(pos==0)break; } return ret;}int main(){ int i,j; scanf("%d",&t); while(t--) { cnt=0; num=0; sz[0]=0; tot=0; ch[0][0]=ch[0][1]=0; scanf("%d%d",&n,&m); int sz=(int)sqrt(n); for(i=1;i<=n;i++) { bel[i]=tot; if(++cnt==sz)tot++,cnt=0; } for(i=1;i<=n;i++)scanf("%d",&a[i]); for(i=1;i<=m;i++)scanf("%d%d%d%d",&qu[i].l,&qu[i].r,&qu[i].c,&qu[i].d),qu[i].id=i,qu[i].block=bel[qu[i].l]; sort(qu+1,qu+m+1); int l=1,r=0; for(i=1;i<=m;i++) { while(r < qu[i].r) { insert(a[++r]); } while(l > qu[i].l) { insert(a[--l]); } while(r > qu[i].r) { del(a[r--]); } while(l < qu[i].l) { del(a[l++]); } ans[qu[i].id]=query(qu[i].c,qu[i].d); } for(i=1;i<=m;i++)printf("%d\n",ans[i]); } return 0;}

转载于:https://www.cnblogs.com/dyzll/p/6868460.html

你可能感兴趣的文章
浅谈-Lambda
查看>>
storm 批处理(窗口)
查看>>
洛谷 P1052 过河
查看>>
Python3 从零单排28_线程队列&进程池&线程池
查看>>
java resources 红叉 Cannot change version of project facet Dynamic Web Module to 2.5
查看>>
阿里云 CentOS7.2 配置FTP+Node.js环境
查看>>
HttpWebRequest 发送简单参数
查看>>
Eclipse启动JVM机制
查看>>
一年的第几天
查看>>
leetcode 223: Rectangle Area
查看>>
Blender插件编写指南
查看>>
二次重建基本完成辣!
查看>>
PHP与Linux进程间的通信
查看>>
【长期更新】坑点合集
查看>>
wnmp windows 2012 r2+php7.0+nginx1.14安装
查看>>
weblogic与axis2 jar包冲突
查看>>
Hello Spring Framework——面向切面编程(AOP)
查看>>
解决java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
查看>>
将.lib库文件转换成.a库文件的工具
查看>>
FZU 2129 子序列个数 (动态规划)
查看>>