题目

给定一个长度为\(n\)的序列,询问有多少个\((l,r),1\leq l\leq r\leq n\)满足

\[xor_{l\leq j\leq r}a_j\geq k
\]

分析

显然跑一次前缀和就变成查询两个数的异或值是否不少于\(k\)

那么这显然可以转换成01trie的问题

按照二进制位处理,分类讨论:

  1. 当前\(x\)和\(k\)的二进制位为1,那么跳到\(trie[p][0]\)
  2. 当前\(x\)和\(k\)的二进制位为0,那么只要让该二进制位为1就能使异或值大于\(k\),然后累计答案再跳到\(trie[p][0]\)
  3. 当前\(x\)的二进制位为0,\(k\)的二进制位为1,那么跳到\(trie[p][1]\)
  4. 当前\(x\)的二进制位为1,\(k\)的二进制位为0,那么只要让该二进制位为0就能使异或值大于\(k\),然后累计答案再跳到\(trie[p][1]\)

代码

#include <cstdio>
#include <cctype>
#define rr register
using namespace std;
const int N=1000011;
int a[N],n,m; long long ans;
inline signed iut(){
rr int ans=0; rr char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans;
}
struct Trie{
int trie[N*30][2],cnt[N*30],tot;
inline void Clear(){
trie[1][0]=trie[1][1]=cnt[1]=0,tot=1;
}
inline void Insert(int x){
rr int p=1;
for (rr int i=29;~i;--i){
rr int z=(x>>i)&1;
if (!trie[p][z]){
trie[p][z]=++tot,cnt[tot]=0,
trie[tot][0]=trie[tot][1]=0;
}
++cnt[p],p=trie[p][z];
}
++cnt[p];
}
inline signed query(int x){
rr int p=1,ans=0;
for (rr int i=29;~i;--i){
if (!p) return ans;
if ((x>>i)&1){
if ((m>>i)&1) p=trie[p][0];
else ans+=cnt[trie[p][0]],p=trie[p][1];
}else{
if ((m>>i)&1) p=trie[p][1];
else ans+=cnt[trie[p][1]],p=trie[p][0];
}
}
return ans+cnt[p];
}
}trie;
signed main(){
freopen("xor.in","r",stdin);
freopen("xor.out","w",stdout);
for (rr int T=iut();T;--T){
trie.Clear(),trie.Insert(0),
n=iut(),m=iut(),ans=0;
for (rr int i=1,x=0;i<=n;++i){
x^=iut(),
ans+=trie.query(x),
trie.Insert(x);
}
printf("%lld\n",ans);
}
return 0;
}

#trie#A 区间异或的更多相关文章

  1. Consecutive Sum LightOJ - 1269(区间异或和)

    Consecutive Sum 又来水一发blog... 本来是昨天补codechef的题,最后一道题是可持久化字典树,然后去黄学长博客看了看 觉得字典树写法有点不太一样,就想着用黄学长的板子写码几道 ...

  2. BZOJ 4260 Codechef REBXOR (区间异或和最值) (01字典树+DP)

    <题目链接> 题目大意:给定一个序列,现在求出两段不相交的区间异或和的最大值. 解题分析: 区间异或问题首先想到01字典树.利用前缀.后缀建树,并且利用异或的性质,相同的两个数异或变成0, ...

  3. BZOJ 4260: Codechef REBXOR (trie树维护异或最大值)

    题意 分析 将区间异或和转化为前缀异或和.那么[L,R][L,R][L,R]的异或和就等于presum[R] xor presum[L−1]presum[R]\ xor \ presum[L-1]pr ...

  4. CF 617E【莫队求区间异或和】

    E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...

  5. P3943 星空 区间异或差分

    \(\color{#0066ff}{ 题目描述 }\) 逃不掉的那一天还是来了,小 F 看着夜空发呆. 天上空荡荡的,没有一颗星星--大概是因为天上吹不散的乌云吧. 心里吹不散的乌云,就让它在那里吧, ...

  6. bzoj 2819 Nim dfn序+树状数组维护区间异或值

    题目大意 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...

  7. 计蒜客 39272.Tree-树链剖分(点权)+带修改区间异或和 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest E.) 2019ICPC西安邀请赛现场赛重现赛

    Tree Ming and Hong are playing a simple game called nim game. They have nn piles of stones numbered  ...

  8. BZOJ 4017 小 Q 的无敌异或 ( 树状数组、区间异或和、区间异或和之和、按位计贡献思想 )

    题目链接 题意 : 中文题 分析 : 首先引入两篇写的很好的题解 题解一.题解二 听说这种和异或相关区间求和的问题都尽量按位考虑 首先第一问.按二进制位计贡献的话.那么对于第 k 位而言 其贡献 = ...

  9. 51Nod - 1295:XOR key (可持久化Trie求区间最大异或)

    给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求ALL 至 ARR 这R - L + 1个数中,与X 进行异或运算(Xor),得到的最大值 ...

  10. Educational Codeforces Round 12 E. Beautiful Subarrays trie求两异或值大于等于k对数

    E. Beautiful Subarrays   One day, ZS the Coder wrote down an array of integers a with elements a1,   ...

随机推荐

  1. 常见Python问题及解决办法

    文件编码问题 如果Python文件中存在中文注释,在运行时报错"SyntaxError: Non-ASCII character '\xe7' in file". 解决办法: 在文 ...

  2. Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程

    前言   基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发.   笔者自身情况   笔者拥有硬件基础,单片机软硬基础,linux ...

  3. Navicat 12连接mysql8.x报错2059 - authentication plugin 'caching_sha2_password' 解决办法

    // %表示远程连接允许所有ip,如果只是连接本地,将%改为localhost即可 ALTER USER 'root'@'%' IDENTIFIED BY '你自己的mysql的密码' PASSWOR ...

  4. 【LeetCode二叉树#16】二叉(搜索)树的最近公共祖先(递归后序遍历,巩固回溯机制)

    二叉树的最近公共祖先 力扣题目链接(opens new window) 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 ...

  5. MySQL基础3-数据库增删改操作

    一.SQL通用语法 SQL 语法可以单行或者多行书写,以分号结尾. SQL 语句可以使用空格/缩进来增强语句的可读性. MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写. 注释: 单 ...

  6. Jenkins+maven+svn+tomcat持续集成环境

    前言 团队最近要把项目发布的工作拿过来,所以需要一个持续集成发布系统 直接上步骤. 下载 http://mirrors.jenkins-ci.org/war/latest/ 直接下载war包,我下载的 ...

  7. 【Azure Service Fabric】关于Service Fabric的相关问题

    问题一:Service Fabric 是否支持Private Link? 在Azure Private Endpoint文档中,罗列出了 Azure 上支持 Private Link 的服务.Serv ...

  8. 电子设备内幕:RAM和ROM小百科

    大家好,我是知微. 在智能手机出现之前,大家对RAM和ROM这两个词都没什么概念.如今很多手机在宣传的时候,都会标明有多大的RAM(运行内存)和ROM(存储空间),因为这在很大程度上影响手机的使用流畅 ...

  9. Kafka的Controller

    控制器组件(Controller),是 Apache Kafka 的核心组件.它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群.集群中任意一台 Broker ...

  10. 通达信金融终端解锁Level-2功能 续二 (非法调试 I say NO)

    图一: 1. 破解后的逐笔分析可以不受条件正常运行. 2. 打开调试,被防止非法调试代码阻拦. 3. 只好关闭调试. 4. 立马spell符文 "Ship Sheep, Cheap Chip ...