Educational Codeforces Round 12 E. Beautiful Subarrays 字典树
E. Beautiful Subarrays
题目连接:
http://www.codeforces.com/contest/665/problem/E
Description
One day, ZS the Coder wrote down an array of integers a with elements a1, a2, ..., an.
A subarray of the array a is a sequence al, al + 1, ..., ar for some integers (l, r) such that 1 ≤ l ≤ r ≤ n. ZS the Coder thinks that a subarray of a is beautiful if the bitwise xor of all the elements in the subarray is at least k.
Help ZS the Coder find the number of beautiful subarrays of a!
Input
The first line contains two integers n and k (1 ≤ n ≤ 106, 1 ≤ k ≤ 109) — the number of elements in the array a and the value of the parameter k.
The second line contains n integers ai (0 ≤ ai ≤ 109) — the elements of the array a.
Output
Print the only integer c — the number of beautiful subarrays of the array a.
Sample Input
3 1
1 2 3
Sample Output
5
Hint
题意
问你有多少个区间,异或起来大于等于k
题解:
显然求个前缀和之后,就等于有多少对数异或起来大于等于k了
这个玩意儿我们每次暴力爬字典树就好了
当k这一位等于0的时候,我们可以直接加上另外一边1的子树大小,因为爬那边之后,我怎么爬都是大于等于k的
然后就这样直接暴力莽一波就好了~
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e7+6;
struct Tri
{
int ch[maxn][2];
int sz[maxn];
int tot;
void init()
{
memset(ch,0,sizeof(ch));
memset(sz,0,sizeof(sz));
tot=2;
}
void insert(int x)
{
int u=1;
for(int i=30;i>=0;i--)
{
int p = (x>>i)&1;
if(!ch[u][p])ch[u][p]=tot++;
sz[u]++;
u=ch[u][p];
}
sz[u]++;
}
int get(int x,int y)
{
int u=1;
long long ans = 0;
for(int i=30;i>=0;i--)
{
int p = (x>>i)&1^1;
int q = (y>>i)&1;
if(q==0)ans+=sz[ch[u][p]],u=ch[u][p^1];
else u=ch[u][p];
}
return ans+sz[u];
}
}T;
int main()
{
T.init();
int n,k;
scanf("%d%d",&n,&k);
int pre = 0;
long long ans = 0;
T.insert(0);
for(int i=1;i<=n;i++)
{
int x;scanf("%d",&x);
pre^=x;
ans+=T.get(pre,k);
T.insert(pre);
}
cout<<ans<<endl;
}
Educational Codeforces Round 12 E. Beautiful Subarrays 字典树的更多相关文章
- 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, ...
- Educational Codeforces Round 12 E. Beautiful Subarrays 预处理+二叉树优化
链接:http://codeforces.com/contest/665/problem/E 题意:求规模为1e6数组中,连续子串xor值大于等于k值的子串数: 思路:xor为和模2的性质,所以先预处 ...
- Educational Codeforces Round 12 E Beautiful Subarrays
先转换成异或前缀和,变成询问两个数异或≥k的方案数. 分治然后Trie树即可. #include<cstdio> #include<algorithm> #define N 1 ...
- [Educational Codeforces Round 63 ] D. Beautiful Array (思维+DP)
Educational Codeforces Round 63 (Rated for Div. 2) D. Beautiful Array time limit per test 2 seconds ...
- Codeforces 665E. Beautiful Subarrays (字典树)
题目链接:http://codeforces.com/problemset/problem/665/E (http://www.fjutacm.com/Problem.jsp?pid=2255) 题意 ...
- E. Beautiful Subarrays 字典树
http://codeforces.com/contest/665/problem/E 给定一个序列,问其中有多少个区间,所有数字异或起来 >= k 看到异或,就应该想到异或的性质,A^B^B ...
- Educational Codeforces Round 63 D. Beautiful Array
D. Beautiful Array time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Educational Codeforces Round 12 F. Four Divisors 求小于x的素数个数(待解决)
F. Four Divisors 题目连接: http://www.codeforces.com/contest/665/problem/F Description If an integer a i ...
- Educational Codeforces Round 12 D. Simple Subset 最大团
D. Simple Subset 题目连接: http://www.codeforces.com/contest/665/problem/D Description A tuple of positi ...
随机推荐
- IT人员必备linux安全运维之Ssh用途、安全性、身份认证以及配置……【转】
SSH一般用途 提供shell,解决telnet不安全的传输 1.修改默认ssh默认端口 vi /etc/ssh/sshd_config 修改之后重启 >systemctl restart ss ...
- Netty并发优化之ExecutionHandler
上文<Netty框架入门>说到:如果业务处理handler耗时长,将严重影响可支持的并发数. 针对这一问题,经过学习,发现了可以使用ExecutionHandler来优化. 先来回顾一下没 ...
- docker简单介绍(资料收集总结)
[前言] 首先,感谢我的leader总是会问我很多技术的基本资料,让我这个本来对于各种技术只知道操作命令不关注理论知识的人,开始重视理论资料. 关于docker的操作步骤等等,都是之前学习的,现在补上 ...
- PHP--- JSON和数组的转换
一.json_encode() <?php $arr =array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_ ...
- Jmeter配置元件执行顺序
一.Jmeter组件 Sampler(采样器):真正干活的,比如http 定时器:默认为毫秒. 前置处理器和后置处理器:必须在有采样器才有效,在采样器的前后执行.作关联,拿响应中的数据使用,用得比较多 ...
- STL中stack/queue/map以及Boost unordered_map 的使用方法
一.stackstack 模板类的定义在<stack>头文件中.stack 模板类需要两个模板参数,一个是元素类型,一个容器类型,但只有元素类型是必要的,在不指定容器类型时,默认的容器类型 ...
- c++ primer 3 标准库类型
3.1 命名空间的using声明 using声明是对某个命名空间做引入.主要作用是简化代码编写. 比如用cout的三种方式: using namespace std; using std::cout; ...
- [实战]MVC5+EF6+MySql企业网盘实战(9)——编辑文件名
写在前面 上篇文章实现了文件的下载,本篇文章将实现编辑文件名的功能. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企业网盘实战(1) ...
- 【LOJ】#2174. 「FJOI2016」神秘数
题解 这道题的结论很显然= = 就是暴力求的话,把一个区间的数排一下序,如果当前这个数大于前面所有数的前缀和+1,那么前缀和+1即我们所求的答案 那么我们设置一个当前答案(初始为1),在主席树上求出来 ...
- elementUI 学习入门之 container 布局容器
Container 布局容器 用于布局的容器组件,方便快速搭建页面基本结构 <el-container> : 外层容器.当子元素包含 <el-header> 或 <el- ...