杭电 F . Xor sum (字典树)
时间:2021-07-25
本文章向大家介绍杭电 F . Xor sum (字典树),主要包括杭电 F . Xor sum (字典树)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题意:
给出n个数,找到最短的区间异或和大于等于K 若没有则输出" - 1 "
思路:
首先我们维护出来异或前缀,我们知道[l~r]的异或前缀等于[ 1 ~ r ] ^ [1 ~ (l - 1) ]这个与前缀和有些相似。
然后我们用字典树维护出来这个前缀,通过记录节点的下表,写算出区间长度。
ll n,k,tot;
ll tree[maxn][2];
ll cnt[maxn];
ll a[maxn];
void insert(ll x,ll num){
ll pos=0,tmp;
for(int i=31;i>=0;i--){
tmp=x>>i &1;
if(!tree[pos][tmp]){
tree[pos][tmp] =++tot;
}
pos=tree[pos][tmp];
cnt[pos] = max(cnt[pos],num);
}
}
ll search(ll x){
ll top=0;
ll tmpx,tmpk;
ll l=0;
for(int i=31;i>=0;i--){
tmpx=x>>i&1;
tmpk=k>>i&1;
if(tmpx){///1
if(tmpk){///1
if(!tree[top][0]) return l;
top=tree[top][0];
}
else {
l=max(l,cnt[tree[top][0]]);
if(!tree[top][1])return l;
top=tree[top][1];
}
}else {
if(tmpk) {
if(!tree[top][1]) return l;
top=tree[top][1];
}else {
l=max(l,cnt[tree[top][1]]);
if(!tree[top][0]) return l;
top=tree[top][0];
}
}
}
return l=max(l,cnt[top]);
}
void solve()
{
scanf("%lld%lld",&n,&k);
for(int i=0;i<=tot;i++){
tree[i][0]=tree[i][1]=0;
cnt[i]=0;
}
tot=0;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]=a[i-1]^a[i];
}
ll ans=1e18;
ll ansl = 0,ansr=0;
insert(0,0);
for(int i=1;i<=n;i++){
int l = search(a[i]);
if(l&&i-l<ans){
ans=i-l;
ansl=l+1;
ansr=i;
}
insert(a[i],i);
}
if(ans==1e18) puts("-1");
else printf("%lld %lld\n",ansl,ansr);
}
原文地址:https://www.cnblogs.com/KingZhang/p/15058873.html
- 深入seajs源码系列三
- 并行爬虫和数据清洗工具(开源)
- 响应式web布局中iframe的自适应
- 简单易学的机器学习算法——协同过滤推荐算法(2)
- 详解ROC/AUC计算过程
- 汉字数组排序及如何检测汉字
- 简单易学的机器学习算法——主成分分析(PCA)
- 基于Xgboost + LR + Keras 建模评估用户信用状态
- canvas实现拖动页面时显示窗口视频
- 鼠标滚轮事件介绍
- Understanding delete
- objC与js通信实现--WebViewJavascriptBridge
- 简单易学的机器学习算法——岭回归(Ridge Regression)
- QQ空间(日志、说说、个人信息)python爬虫源码(一天可抓取 400 万条数据)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【52期】记一道简单的Java面试题,但答错率很高!
- 面向隐私 AI 的 TensorFlow 深度定制化实践
- 别再问如何用Python提取PDF内容了!
- gff文件转换成gtf文件
- R的save,load函数和 .rda文件
- 10行Python代码自动清理电脑内重复文件,解放双手!
- 【一天一大 lee】二叉树的后序遍历 (难度:中等) - Day20200929
- 一日一技:在Golang下如何相对简单地开发爬虫?
- 原创 | 一文读懂正态分布与贝塔分布
- 收款神器!解读聚合收款码背后的原理
- 短视频商城源码,滑动时渐变效果实现
- CICD实战——服务自动测试
- MySQL 案例:left join 与 BUG
- WordPress缩略图出现A TimThumb error has occured解决办法
- 2020-09-30:谈谈内存对齐。