789. 数的范围(C++和Python3)——2023.5.3打卡

news/2025/1/7 21:55:23/

文章目录

  • Question
  • Ideas
  • Code

Question

给定一个按照升序排列的长度为 n
的整数数组,以及 q
个查询。

对于每个查询,返回一个元素 k
的起始位置和终止位置(位置从 0
开始计数)。

如果数组中不存在该元素,则返回 -1 -1。

输入格式
第一行包含整数 n
和 q
,表示数组长度和询问个数。

第二行包含 n
个整数(均在 1∼10000
范围内),表示完整数组。

接下来 q
行,每行包含一个整数 k
,表示一个询问元素。

输出格式
共 q
行,每行包含两个整数,表示所求元素的起始位置和终止位置。

如果数组中不存在该元素,则返回 -1 -1。

数据范围
1≤n≤100000

1≤q≤10000

1≤k≤10000
输入样例:
6 3
1 2 2 3 3 4
3
4
5
输出样例:
3 4
5 5
-1 -1

Ideas

  • 整数二分,如果满足条件,需要更新l=mid,则需要mid = l+r+1>>1

Code

#include <iostream>using namespace std;
const int N = 1E5 + 10;
int q[N];int main()
{int n, m;scanf("%d%d", &n, &m);for (int i = 0; i < n; i ++) scanf("%d", &q[i]);while(m --){int k;scanf("%d", &k);int l = 0, r = n - 1;while(l < r){int mid = l + r >> 1;if (q[mid] >= k) r = mid;else l = mid + 1;}if (q[l] == k){printf("%d ", l);int r = n - 1;while(l < r){int mid = l + r + 1 >> 1;if (q[mid] <= k) l = mid;else r = mid - 1;}printf("%d\n", r);}elseputs("-1 -1");}return 0;
}
n, m = list(map(int, input().strip().split()))
q = [int(i) for i in input().strip().split()]for i in range(m):k = int(input())l, r = 0, n - 1while l < r:mid = l + r >> 1if q[mid] >= k:r = midelse:l = mid + 1if q[l] != k:print(-1,-1)else:print(l, end = ' ')r = n - 1while l < r:mid = l + r + 1 >> 1if q[mid] <= k:l = midelse:r = mid - 1print(r)

在这里插入图片描述


http://www.ppmy.cn/news/57554.html

相关文章

【VAR | 时间序列】应用VAR模型时的15个注意点

一、前言 向量自回归&#xff08;VAR,Vector Auto regression&#xff09;常用于预测相互联系的时间序列系统以及分析随机扰动对变量系统的动态影响。 VAR方法通过把系统中每一个内生变量,作为系统中所有内生变量的滞后值的函数来构造模型&#xff0c;从而回避了结构化模型的…

Java入门云计算:从基础到实践

前言 随着云计算的普及&#xff0c;越来越多的企业开始将应用部署在云上。作为广受欢迎的编程语言&#xff0c;Java在云计算中具有诸多优势。本文将为你介绍Java在云计算中的优势、Java做云计算的入门案例及分析&#xff0c;并教你如何使用Java实现简单的云计算应用。 云计算…

VMware12安装图解

目录 一、介绍VMware虚拟机 二、安装VMware12虚拟机 三、VMware虚拟机内部新建虚拟机 清理磁盘 一、介绍VMware虚拟机 VMware是一个虚拟机。 什么是虚拟机&#xff1f;字面意思‘虚拟’&#xff0c;那就不算是真的&#xff1b;‘机’可以理解为一台电脑或者一个电脑系统。…

Selenium实战教程系列(二)---元素定位

Selenium webdriver能够模拟人对浏览器进行操作的前提是界面元素的定位。元素的定位可以说是Selenium自动化脚本的基础。这一小节笔者将介绍如何在selenium中进行元素的定位。 定位元素的方法 Selenium中提供了以下定位元素的方法&#xff1a; 首先看一个HTML文件 test_page.…

《Netty》从零开始学netty源码(四十七)之PooledByteBuf的方法

setBytes() 从channel中读取数据并写到PooledByteBuf中&#xff0c;分配缓存的过程与getBytes一样&#xff0c;只是duplicate为false。 capacity() 动态更新容量&#xff0c;根据新传入的容量值更改length。 如果新容量值与旧值相同则无需扩容如果为非池化内存则根据新容量值…

TypeScript算法题实战——剑指 Offer篇(2)

Typescript 是 Javascript 的超集。Typescript 为 Javascript 增加类型能力&#xff0c;主要为了避免 JS 弱类型下产生的各种有意无意的问题。Typescript 的出现大大改善了开发体验&#xff0c;增强了代码的可维护性和稳定性&#xff0c;如今已被越来越多的大型前端项目选用。 …

培训技能 GET

技巧 调整语速和语调&#xff1a;讲解者需要注意语速和语调的调整&#xff0c;以便让听众更好地理解和接受内容。 使用案例和实例&#xff1a;讲解者可以使用案例和实例来帮助听众更好地理解和记忆内容&#xff0c;同时也可以增强听众的兴趣和参与度。 互动式讲解&#xff1a…

【实战项目开发技术分享】ROS自动安装以及卸载教程

文章目录 前言一、ROS安装教程1.1 添加ROS软件包源1.2 安装ROS核心软件包1.3 rosdep初始化以及更新1.4 配置ROS环境变量1.5 安装依赖工具和ROS工具1.6 测试ROS安装是否成功二、ROS卸载教程三、自动安装ROS脚本(以Noetic为例 )3.1 方法一3.2 方法二四、自动卸载ROS(以Noetic为…