【洛谷 P2249】【深基13.例1】查找(向量+二分查找+递归)

简介: 该题目要求在一个单调不减的整数序列中查找特定数值首次出现的位置,输入包含序列长度、查询次数及数值,输出对应位置或-1。给定样例输入为11个数和3次查询,输出分别为1、2和-1。代码使用C++,通过二分查找优化效率,适应大数据量。

【深基13.例1】查找

题目描述

输入 $n$ 个不超过 $10^9$ 的单调不减的(就是后面的数字不小于前面的数字)非负整数 $a_1,a2,\dots,a{n}$,然后进行 $m$ 次询问。对于每次询问,给出一个整数 $q$,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 $-1$ 。

输入格式

第一行 $2$ 个整数 $n$ 和 $m$,表示数字个数和询问次数。

第二行 $n$ 个整数,表示这些待查询的数字。

第三行 $m$ 个整数,表示询问这些数字的编号,从 $1$ 开始编号。

输出格式

输出一行,$m$ 个整数,以空格隔开,表示答案。

样例 #1

样例输入 #1

11 3
1 3 3 3 5 7 9 11 13 15 15
1 3 6

样例输出 #1

1 2 -1

提示

数据保证,$1 \leq n \leq 10^6$,$0 \leq a_i,q \leq 10^9$,$1 \leq m \leq 10^5$

本题输入输出量较大,请使用较快的 IO 方式。

思路

数据量很大,需要优化读入。通过递归进行二分查找。

AC代码

#include <iostream>
#include <vector>
#include <algorithm>
#define AUTHOR "HEX9CF"
using namespace std;

int read(){
   
    char ch;
    int x = 0;
    while((ch < '0' || ch > '9')){
   
        ch = getchar();
    }
    while(!(ch < '0' || ch > '9')){
   
        x = x * 10 + ch - '0';
        ch = getchar();
    }
    return x;
}

int main(){
   
    int n, m;
    vector<int> a;
    n = read();
    m = read();
    for(int i = 0; i < n; i++){
   
        a.push_back(read());
    }
    for(int i = 0; i < m; i++){
   
        if(i){
   
            putchar(' ');
        }
        int t = read();
        vector<int>::iterator lb = lower_bound(a.begin(), a.end(), t);
        if(lb == a.end() || *lb != t){
   
            cout << -1;
        }else{
   
            cout << lb - a.begin() + 1;
        }
    }
    return 0;
}
目录
相关文章
|
NoSQL 编译器 Linux
CodeBlocks-20.03下载安装及中文教程
CodeBlocks强大之处 1、跨平台,windows、linux 、mac都可以用 2、轻量化,远不及VS占用空间 3、完全免费
3089 1
CodeBlocks-20.03下载安装及中文教程
|
算法 安全 PHP
密码学系列之二:密码学基本概念
密码学系列之二:密码学基本概念
1010 0
密码学系列之二:密码学基本概念
|
机器学习/深度学习 算法 JavaScript
密码学系列之四:一文搞懂序列密码
密码学系列之四:一文搞懂序列密码
1272 0
|
Linux 编译器 数据库
pacman包管理器介绍
pacman包管理器介绍
823 0
|
C++ Python Perl
终于解决VScode中python/C++打印中文全是乱码的问题了
终于解决VScode中python/C++打印中文全是乱码的问题了
1155 0
终于解决VScode中python/C++打印中文全是乱码的问题了
|
11月前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
546 6
|
12月前
|
存储 算法 C++
高精度算法(加、减、乘、除,使用c++实现)
高精度算法(加、减、乘、除,使用c++实现)
2363 0
高精度算法(加、减、乘、除,使用c++实现)
|
12月前
|
前端开发 容器
box—sizing 属性的了解
box—sizing 属性的了解
279 0
|
Java 编译器 C语言
【C/C++】 switch-case 详解/全面总结
关于 C语言/C++ 中,switch-case 的尽量详细和全面的解释与总结
2927 0
|
关系型数据库 MySQL 索引
MySQL不走索引的情况分析
MySQL不走索引的情况分析
214 0
MySQL不走索引的情况分析