Codeforces 665E Beautiful Subarrays【01trie树】
来源:互联网 发布:java io流总结 编辑:程序博客网 时间:2024/06/04 18:36
题目链接:
http://codeforces.com/contest/665/problem/E
题意:
求异或值大于给定K的区间个数。
分析:
首先我们可以得到区间前缀的异或值。
这样我们将这个前缀M和K一起走trie树,如果该位K的值为0,那么无论怎么走最后得到的答案都不会比K小,所以直接加上另一边的子树大小,然后继续沿着当前边走。如果该位K的值为1,那么想要大于等于K必须沿着另一边贪心的走。
代码:
#include<cstdio>#include<iostream>using namespace std;const int maxn = 1000000 << 5, maxm = 1e6 + 5;int f[maxn][2];int cnt = 1;int son[maxn], pre[maxm];long long ans = 0;#define pl(n) cout<<#n<<": "<<n<<endl;#define sa(n) scanf("%d", &n)void insert(int n){ int k; int u = 1; for(int i = 30; i >= 0; i--){ k = (n >> i) & 1; if(!f[u][k]) f[u][k] = ++cnt; son[u]++; u = f[u][k]; } son[u]++;}void query(int n, int m){ int k1, k2, u = 1; for(int i = 30; i >= 0; i--){ k1 = (n >> i) & 1; k2 = (m >> i) & 1; if(k2 == 0){ ans += son[f[u][!k1]]; u = f[u][k1]; } else u = f[u][!k1]; if(u == 0) break; } ans += son[u];}int main (void){ int n,k;sa(n);sa(k); pre[0] = 0; int num; insert(pre[0]); for(int i = 1; i <= n; i++){ sa(num); pre[i] = pre[i - 1] ^ num; query(pre[i], k); insert(pre[i]); //pl(ans); } printf("%I64d\n", ans); return 0;}
0 0
- Codeforces 665E Beautiful Subarrays (01Trie)
- Codeforces 665E. Beautiful Subarrays (trie树)
- Codeforces 665E Beautiful Subarrays (Trie树)
- Codeforces 665E Beautiful Subarrays【01trie树】
- CodeForces 665E Beautiful Subarrays(Trie)
- Codeforces-665E-Beautiful Subarrays Trie树(字典树)
- Codeforces 665E Beautiful Subarrays (01字典树)
- CodeForces 665E Beautiful Subarrays
- Educational Codeforces Round 12 E. Beautiful Subarrays【字典树】
- Educational Codeforces Round 12 E. Beautiful Subarrays
- Educational Codeforces Round 12-E. Beautiful Subarrays
- Educational Codeforces Round 12 E. Beautiful Subarrays
- Educational Codeforces Round 12E. Beautiful Subarrays
- codeforces665e Beautiful Subarrays(trie)
- E. Beautiful Subarrays
- Educational Codeforces Round 12 E. Beautiful Subarrays 预处理前缀+字典树优化★ ★
- CF665E Beautiful Subarrays字典树
- Beautiful Subarrays
- Android Volley组件的优化
- 深入了解Struts2返回JSON数据的原理及具体应用范例
- 微信分享操作JSSDK
- ortp中的queue_t,msgb(mblk_t)和datab(也适用于solaris驱动所使用的数据结构)
- Warning: Could not find an exact (case-sensitive) match for 'Title'.
- Codeforces 665E Beautiful Subarrays【01trie树】
- train_cascade 源码阅读之LBP特征
- Navicat 导出向导之设置目标文件名
- js关于字符串空格的处理
- android中的Selector的用法---主要是改变ListView和Button控件的默认背景
- DrawCall优化
- steered BRIEF
- linux下在命令行中用默认程序打开特定文件如.mp3 .jpg 甚至是网页也可以
- Intellj Maven教程详解地址