当前位置: 首页 > news >正文

第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)

[蓝桥杯 2022 省 A] 选数异或

题目描述

给定一个长度为 nnn 的数列 A1,A2,⋯,AnA_{1}, A_{2}, \cdots, A_{n}A1,A2,,An 和一个非负整数 xxx, 给定 mmm 次查询, 每次询问能否从某个区间 [l,r][l, r][l,r] 中选择两个数使得他们的异或等于 xxx

输入格式

输入的第一行包含三个整数 n,m,xn, m, xn,m,x

第二行包含 nnn 个整数 A1,A2,⋯,AnA_{1}, A_{2}, \cdots, A_{n}A1,A2,,An

接下来 mmm 行,每行包含两个整数 li,ril_{i}, r_{i}li,ri 表示询问区间 [li,ri]\left[l_{i}, r_{i}\right][li,ri]

输出格式

对于每个询问, 如果该区间内存在两个数的异或为 xxx 则输出 yes, 否则输出 no

样例 #1

样例输入 #1

4 4 1
1 2 3 4
1 4
1 2
2 3
3 3

样例输出 #1

yes
no
yes
no

提示

【样例说明】

显然整个数列中只有 2,3 的异或为 1 。

【评测用例规模与约定】

对于 20%20 \%20% 的评测用例, 1≤n,m≤1001 \leq n, m \leq 1001n,m100;

对于 40%40 \%40% 的评测用例, 1≤n,m≤10001 \leq n, m \leq 10001n,m1000;

对于所有评测用例, 1≤n,m≤105,0≤x<220,1≤li≤ri≤n1 \leq n, m \leq 10^5,0 \leq x<2^{20}, 1 \leq l_{i} \leq r_{i} \leq n1n,m105,0x<220,1lirin0≤Ai<2200 \leq A_{i}<2^{20}0Ai<220

蓝桥杯 2022 省赛 A 组 D 题。

分析

A组的题,题目有三种解法,但是这道题无论啥解法,实际上是万变不离其宗的,就是他的关键的对于某个点的预处理。想要解这题主要还是要想出这个处理。之所以写不同的这三种解法,主要是复习一下模板吧
首先,我们容易知道:若a^b=x,那么a^x=b,对于数组a[i],我们可以通过关系式,找到a[i]^x的左边的最靠近下标,明显我们需要找到最靠近的下标,而当这个下标是大于等于所需要找的区间的左端点,即可满足这个区间内可以找到两个数的异或为x。
当对于一个数,其左边没有数与其异或等于x时,那么就将其置为0,而当我们不断输入数字的时候,我们需要同时存储这个数的下标,方便循环到下一个下标的时候找到这个数字(通过a^x=b这样的关系),具体看代码

解法一:线段树

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int t[400005],a[100005],Left[100005],pos[2000005];
inline void buildtree(int k,int l,int r){if(l==r){t[k]=Left[r];return;}int mid=(l+r)>>1;buildtree(k<<1,l,mid),buildtree(k<<1|1,mid+1,r);t[k]=max(t[k<<1],t[k<<1|1]);
}
inline int query(int k,int l,int r,int x,int y){if(l==x&&r==y)return t[k];int mid=(l+r)>>1;if(y<=mid)return query(k<<1,l,mid,x,y);elseif(x>mid)return query(k<<1|1,mid+1,r,x,y);else return max(query(k<<1,l,mid,x,mid),query(k<<1|1,mid+1,r,mid+1,y));
}
int main(){int n,m,x;cin>>n>>m>>x;for(int i=1;i<=n;++i){scanf("%d",&a[i]);Left[i]=pos[a[i]^x];pos[a[i]]=i;}buildtree(1,1,n);while(m--){int x,y;scanf("%d%d",&x,&y);int k=query(1,1,n,x,y);if(k>=x)printf("yes\n");else printf("no\n");}
}

解法二:DP

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int f[100005],pos[5000005];
int main(){int n,m,x;cin>>n>>m>>x;for(int i=1;i<=n;++i){int a;scanf("%d",&a);f[i]=max(f[i-1],pos[a^x]);pos[a]=i;}while(m--){int l,r;scanf("%d%d",&l,&r);if(f[r]>=l)printf("yes\n");else printf("no\n");}
}

解法三:ST表

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int st[100005][20],pos[5000005];
int main(){int n,m,x;cin>>n>>m>>x;for(int i=1;i<=n;++i){int a;scanf("%d",&a);st[i][0]=pos[a^x];pos[a]=i;}int k=log2(n);for(int i=1;i<=k;++i)for(int j=1;j+(1<<i)-1<=n;++j)st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);while(m--){int l,r;scanf("%d%d",&l,&r);int len=log2(r-l+1);int p=max(st[l][len],st[r-(1<<len)+1][len]);if(p>=l)printf("yes\n");else printf("no\n");}
}

相关文章:

第十三届蓝桥杯A组:选数异或——三种解法(线段树、DP、ST表)

[蓝桥杯 2022 省 A] 选数异或 题目描述 给定一个长度为 nnn 的数列 A1,A2,⋯,AnA_{1}, A_{2}, \cdots, A_{n}A1​,A2​,⋯,An​ 和一个非负整数 xxx, 给定 mmm 次查询, 每次询问能否从某个区间 [l,r][l, r][l,r] 中选择两个数使得他们的异或等于 xxx 。 输入格式 输入的第一…...

【CTF】CTF竞赛介绍以及刷题网址

CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今&…...

Springboot怎么优雅实现大文件的上传

前言在软件工程里&#xff0c;在处理“大”的时候一直是一个难点和难点&#xff0c;如并发大、数据量大、文件大&#xff0c;对硬件进行升级可以解决一些问题&#xff0c;但这并不最聪明的办法&#xff0c;而对于老板来说&#xff0c;这也不是成本最小的办法。作为开发人员来说…...

2月编程语言排行榜新鲜出炉,谁又摘得桂冠?

近日&#xff0c;TIOBE公布了2023年2月编程语言排行榜&#xff0c;本月各个语言表现如何&#xff1f;谁又摘得桂冠&#xff1f;一起来看看吧&#xff01; TIOBE 2月Top15编程语言&#xff1a; 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴…...

机器学习中的数学原理——模型评估与交叉验证

惭愧惭愧&#xff01;机器学习中的数学原理这个专栏已经很久没有更新了&#xff01;前段时间一直在学习深度学习&#xff0c;paddlepaddle&#xff0c;刷题专栏跟新了&#xff0c;这个专栏就被打入冷宫了。这个专栏名为白话机器学习中数学学习笔记&#xff0c;主要是用来分享一…...

JAVA开发(JSP的9大内置对象和4大作用域)

背景&#xff1a; 在springboot横行的javaweb开发中&#xff0c;现在的后端开发工程师基本不需要写前端JSP页面。但是作为web开发工程师&#xff0c;不懂JSP的原理和作用&#xff0c;几乎是不行的。 JSP技术介绍&#xff1a; JSP&#xff08;全称Java Server Pages&#xff…...

(4)EKF失控保护

文章目录 前言 4.1 什么时候会触发? 4.2 当失控保护触发时,会发生什么?...

数论----质数的求解(C/C++)

CSDN的uu&#xff0c;你们好呀&#xff0c;今天我们要学习的内容是数论哦&#xff01;这也是算法题中的一类题目吧。记好安全带&#xff0c;准备发车咯&#xff01;&#x1f680;学习数论的意义&#x1f4e2;算法导论说&#xff1a;“数论曾经被视为一种虽然优美但却没什么用处…...

【电赛MSP430系列】GPIO、LED、按键、时钟、中断、串口、定时器、PWM、ADC

文章目录MSP430一、GPIO二、点亮LED三、按键控制LED四、更改主时钟五、串口通信六、串口中断七、外部中断八、定时器九、定时器中断十、PWM十一、ADCMSP430 MSP430 是德州仪器&#xff08;TI&#xff09;一款性能卓越的超低功耗 16 位单片机&#xff0c;自问世以来&#xff0c…...

【Linux】进程理解与学习(Ⅱ)

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统【Linux】进程理解与学习&#xff08;Ⅰ&#xff09;浅谈Linux下的shell--BASH前言章节…...

vscode 爽到起飞的快捷键

这里写目录标题1. 窗口操作2. 代码编辑3. 批量操作4. 错误处理1. 窗口操作 文件之间切换: CtrlTab 切出一个新的编辑器窗口&#xff08;最多3个): Ctrl\ 切换左中右3个编辑器窗口的快捷键: Ctrl1 Ctrl2 Ctrl3 2. 代码编辑 代码格式化: ShiftAltF 向上或向下移动一行: Alt…...

vs +qt 打包.cpp和.h为DLL文件

文章目录一 编译成库1 创建一个Qt library 项目2&#xff0c;将已有的文件拷贝到项目目录下3 在项目中添加现有项4&#xff0c;拷贝头文件到需要暴露给外面使用的类的头文件中5 拷贝xxx_EXPORT的宏到需要被暴露的类的名前面6 然后点击编译 就完成了。得到的dll文件在debug里面二…...

echarts有滑块

vue下使用echarts折线图及其横坐标拖拽功能 drawLine() {let that this,lineDate [],dispatchCount [],finishCount [],newCount [];let param {// 参数};axios.post(url, param).then(function(response) {let rs response.data.data;if (rs ! undefined && rs…...

MATLAB绘制ROC曲线

ROC曲线(Receiver Operating Characteristic Curve) 1 简介 ROC曲线是用于评估二元分类模型&#xff08;如Logistic回归&#xff09;表现优劣的一种工具&#xff0c;其横轴表示假阳性率&#xff08;false positive rate&#xff0c;FPR&#xff09;&#xff0c;即实际为负例但…...

ChatGPT前传

文章目录前言GPT概述GPT-1代GPT-1 学习目标和概念介绍GPT-1 训练数据集GPT-1 模型结构和应用细节GPT-1 效果性能和总结GPT-2代GPT-2 学习目标和概念介绍GPT-2 训练数据集GPT-2 模型结构和应用细节GPT-2 性能效果和总结GPT-3代GPT-3 学习目标和概念介绍GPT-3 训练数据集GPT-3 模…...

我的十年编程路 2020年篇

我出生在1990年&#xff0c;2020年到来的时候&#xff0c;我完成了一项成就&#xff1a;奔三。同时&#xff0c;也开启了新的征程&#xff1a;奔四。 2020年的春节是在广州的丈母娘家度过的&#xff0c;春节后大概是初五&#xff0c;或者是初六&#xff0c;我和媳妇就返回天津…...

力扣-SQL【入门】

https://leetcode.cn/study-plan/sql/?progressxhqm4sjh 目录选择595. 大的国家1757. 可回收且低脂的产品584. 寻找用户推荐人183. 从不订购的客户排序 & 修改1873. 计算特殊奖金627. 变更性别196. 删除重复的电子邮箱选择 595. 大的国家 # Write your MySQL query state…...

Vue中组件到底是什么

1.先说结论&#xff1a; Vue中组件本质是一个名为VueComponent的构造函数&#xff0c;且不是程序员定义的&#xff0c;是Vue.extend生成的。 2.我们使用组件时发生了什么&#xff1f; 比如定义了一个school,然后在页面上使用它 我们只需要写 < school/ > 或< school &…...

不同时间间隔数据对统计结果的影响

目录摘要1. 实测数据来源2. 数据分析方法3 结果分析3.1 波况分析摘要 采用不同的波浪观测方法所获得的波浪数据的时间间隔不一致&#xff0c;其数据的准确性须进行分析。基于大埕湾逐时周年波浪观测数据&#xff0c;截取不同时间间隔的波浪数据&#xff0c;采用统计和相关分析…...

hudi系列-数据写入方式及使用场景

hudi支持多种数据写入方式:insert、bulk_insert、upsert、boostrap,我们可以根据数据本身属性(append-only或upsert)来选择insert和upsert方式,同时也支持对历史数据的高效同步并嫁接到实时流程。 这里的使用技术组合为flink + hudi-0.11 upsert 这是hudi默认的写入方式,…...

汽车电子工程师必看:如何用MPC5643L实现ASIL-D级别的功能安全设计(附完整代码示例)

汽车电子工程师必看&#xff1a;如何用MPC5643L实现ASIL-D级别的功能安全设计&#xff08;附完整代码示例&#xff09; 在智能驾驶技术快速发展的今天&#xff0c;功能安全已成为汽车电子系统设计的核心考量。作为汽车电子工程师&#xff0c;我们面临的挑战不仅在于实现复杂功…...

本地 AI 智能体落地:OpenClaw 如何稳定运行并真正提效?

最近我把 OpenClaw 作为核心自动化工具来使用了一段时间。它能让大模型直接操作电脑&#xff0c;跑脚本、处理文件、启动服务、执行批量任务&#xff0c;这种 “本地自动化” 体验非常真实。 但一开始我也被它的 “不稳定” 搞得很崩溃。 1. OpenClaw 的真正价值&#xff08;…...

Mac上PPT讲稿一键变文稿:用AppleScript自动化导出备注到TXT(附完整代码)

Mac上PPT讲稿一键变文稿&#xff1a;用AppleScript自动化导出备注到TXT&#xff08;附完整代码&#xff09; 每次做完PPT&#xff0c;看着密密麻麻的备注栏&#xff0c;你是不是也头疼怎么把这些零散的讲稿整理成连贯的文档&#xff1f;作为一位经常需要准备培训材料的讲师&…...

Win11Debloat终极指南:5分钟让你的Windows系统焕然一新

Win11Debloat终极指南&#xff1a;5分钟让你的Windows系统焕然一新 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本&#xff0c;用于从Windows中移除预装的无用软件&#xff0c;禁用遥测&#xff0c;从Windows搜索中移除Bing&#xff0c;以及执行各种其他更改以简化和…...

vLLM-v0.17.1实操手册:SSH环境下vLLM服务日志实时分析与性能诊断

vLLM-v0.17.1实操手册&#xff1a;SSH环境下vLLM服务日志实时分析与性能诊断 1. vLLM框架简介 vLLM是一个专注于大语言模型(LLM)推理和服务的高性能开源库&#xff0c;由加州大学伯克利分校的天空计算实验室(Sky Computing Lab)发起&#xff0c;现已发展为社区驱动的项目。它…...

PySide6商业项目避坑指南:从许可证验证到Qt Designer实战

PySide6商业项目避坑指南&#xff1a;从许可证合规到UI开发实战 当企业开发者选择PySide6作为桌面应用开发框架时&#xff0c;往往会被其商业友好的LGPL许可证所吸引。但真正落地到项目开发中&#xff0c;从法律合规到技术实现都存在诸多需要特别注意的细节。本文将深入剖析那些…...

告别DWA!用TEB局部规划器让你的ROS机器人学会‘倒车入库’(附多机编队避障实测对比)

告别DWA&#xff01;用TEB局部规划器解锁机器人高阶机动能力 在机器人自主导航领域&#xff0c;传统动态窗口方法(DWA)长期占据主导地位&#xff0c;直到开发者们遇到那些需要倒车、急转弯或狭窄空间多机协作的真实场景。想象一下仓储机器人需要在货架间完成"倒车入库&quo…...

基于YOLOv8深度学习的驾驶员分心行为实时检测与语音预警系统【python源码+Pyqt5界面+数据集】

1. 项目背景与核心价值 开车时低头看手机、点烟、喝饮料这些看似平常的小动作&#xff0c;每年导致全球超过120万起交通事故。我去年参与某物流车队安全系统升级时&#xff0c;亲眼见过一个司机因为伸手拿水杯导致车辆偏离车道的事故录像——整个过程不到3秒。这正是我们开发这…...

RAR Unlocker 4.0 汉化版:专注 RAR 压缩包锁定 / 解锁,支持查看属性与命令行批量处理,轻量便携,是解决 RAR 锁定问题的优质辅助工具

大家好&#xff0c;我是大飞哥。日常使用 RAR 压缩包时&#xff0c;误操作锁定后会导致文件无法修改、添加或删除&#xff0c;而 WinRAR 本身又不提供便捷的解锁功能&#xff0c;手动处理不仅繁琐还容易损坏压缩包 —— 而RAR Unlocker 4.0 汉化版就是专为解决这些痛点打造的轻…...

技能组合玩法:OpenClaw串联百川2-13B-4bits与Stable Diffusion技能

技能组合玩法&#xff1a;OpenClaw串联百川2-13B-4bits与Stable Diffusion技能 1. 为什么需要技能组合&#xff1f; 去年我运营技术博客时&#xff0c;最头疼的就是内容生产的全流程管理。写一篇文章需要经历选题构思、文案撰写、配图制作、格式调整、发布上线等多个环节。每…...