news 2026/6/10 16:18:54

csp信奥赛C++标准模板库STL案例应用2

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
csp信奥赛C++标准模板库STL案例应用2

csp信奥赛C++标准模板库STL案例应用2

lower_bound实践

题目描述

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

输入格式

第一行2 22个整数n nnm mm,表示数字个数和询问次数。

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

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

输出格式

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

输入输出样例 1
输入 1
11 3 1 3 3 3 5 7 9 11 13 15 15 1 3 6
输出 1
1 2 -1
说明/提示

数据保证,1 ≤ n ≤ 1 0 6 1 \leq n \leq 10^61n1060 ≤ a i , q ≤ 1 0 9 0 \leq a_i,q \leq 10^90ai,q1091 ≤ m ≤ 1 0 5 1 \leq m \leq 10^51m105

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

思路分析

解题思路

这是一个在单调不减序列中查找元素第一次出现位置的问题。由于序列有序,可以使用二分查找来提高效率。

关键点
  1. 单调不减性质:后面的数字不小于前面的数字,可以使用二分查找
  2. 查找要求:找到元素第一次出现的位置(最左位置)
  3. 数据规模:n≤10⁶,m≤10⁵,需要O(m log n)的算法
算法选择
  • 使用C++标准库的lower_bound函数
  • lower_bound返回第一个大于等于目标值的元素位置
  • 需要验证找到的元素是否等于目标值

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;// 定义数组最大容量,略大于10⁶intn,m,a[N];// n: 数字个数,m: 询问次数,a: 存储数字的数组intmain(){// 关闭同步流,提高输入输出速度(适用于纯cin/cout)ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m;// 读入n个单调不减的数字,下标从1开始(题目要求编号从1开始)for(inti=1;i<=n;i++)cin>>a[i];// 处理m次询问while(m--){intx;// 要查找的数字cin>>x;// lower_bound在[begin, end)范围内查找第一个≥x的元素位置// a+1表示数组从下标1开始,a+n+1表示结束位置(下标n之后)// 减去a得到数组下标(如果是普通数组,减去a得到从0开始的下标)// 因为a是指向a[0]的指针,所以需要调整为从1开始的下标intans=lower_bound(a+1,a+n+1,x)-a;// 验证找到的元素是否等于x(可能找到的是大于x的元素)if(ans<=n&&x==a[ans])// 添加边界检查更安全cout<<ans<<" ";elsecout<<-1<<" ";}return0;}

功能分析

1.输入处理
  • 读取n个有序数字存储到数组a中(下标从1开始)
  • 准备处理m次查询
2.二分查找核心
  • lower_bound函数作用

    • 在有序区间内二分查找第一个≥x的元素
    • 返回指向该元素的指针(迭代器)
    • 时间复杂度:O(log n)
  • 下标计算

    // 指针减法得到的是元素之间的偏移量// 因为a指向a[0],所以需要减去a来得到正确下标lower_bound(a+1,a+n+1,x)-a

    例如:如果找到a[5],那么a+5 - a = 5,得到下标5

3.结果验证
  • 必须验证找到的元素是否等于目标值x
  • 因为lower_bound可能返回第一个大于x的元素位置
  • 边界情况:查找的值大于数组中所有值,会返回a+n+1
4.时间复杂度
  • 预处理:O(n) 读取数组
  • 每次查询:O(log n) 二分查找
  • 总体:O(m log n) ≈ 10⁵ × log₂(10⁶) ≈ 2×10⁶次操作,效率很高
5.空间复杂度
  • O(n) 存储数组,N=10⁶+10个int,约4MB
6.优化措施
  1. IO优化:使用ios::sync_with_stdio(false)关闭C与C++流的同步
  2. 二分优化:直接使用标准库优化过的二分查找
  3. 内存连续:数组存储,缓存友好
7.边界情况处理
  • 查找的值不存在:返回-1
  • 查找的值有多个:返回第一次出现的位置(lower_bound特性)
  • 空数组:n=0时循环不会执行,逻辑正确
  • 查找值大于所有元素:ans = n+1,输出-1
  • 查找值小于所有元素:可能找到a[1],验证后输出-1

各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}
  • 一、CSP信奥赛C++通关学习视频课:
    • C++语法基础
    • C++语法进阶
    • C++算法
    • C++数据结构
    • CSP信奥赛数学
    • CSP信奥赛STL
  • 二、CSP信奥赛C++竞赛拿奖视频课:
    • 信奥赛csp-j初赛高频考点解析
    • CSP信奥赛C++复赛集训课(12大高频考点专题集训)
  • 三、考级、竞赛刷题题单及题解:
    • GESP C++考级真题题解
    • CSP信奥赛C++初赛及复赛高频考点真题解析
    • CSP信奥赛C++一等奖通关刷题题单及题解

详细内容:

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转


2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

3、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

  • 2025 csp-j 复赛真题及答案解析(最新更新)
  • 2025 csp-x(山东) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(河南) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(辽宁) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(江西) 复赛真题及答案解析(最新更新)
  • 2025 csp-x(广西) 复赛真题及答案解析(最新更新)
  • 2020 ~ 2024 csp 复赛真题题单及题解
  • 2019 ~ 2022 csp-j 初赛高频考点真题分类解析
  • 2021 ~ 2024 csp-s 初赛高频考点解析
  • 2023 ~ 2024 csp-x (山东)初赛真题及答案解析
  • 2024 csp-j 初赛真题及答案解析
  • 2025 csp-j 初赛真题及答案解析(最新更新)
  • 2025 csp-s 初赛真题及答案解析(最新更新)
  • 2025 csp-x (山东)初赛真题及答案解析(最新更新)
  • 2025 csp-x (江西)初赛真题及答案解析(最新更新)
  • 2025 csp-x (辽宁)初赛真题及答案解析(最新更新)

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

  • 129 道刷题练习和详细题解,涉及:模拟算法、数学思维、二分算法、 前缀和、差分、深搜、广搜、DP专题、 树和图

4、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 14:10:32

LangFlow市场调研报告自动生成系统

LangFlow&#xff1a;让AI应用开发走向可视化与民主化 在大语言模型&#xff08;LLM&#xff09;席卷各行各业的今天&#xff0c;构建一个能回答用户问题、生成报告甚至辅助决策的AI系统&#xff0c;早已不再是实验室里的幻想。然而&#xff0c;现实中的开发流程却常常令人望而…

作者头像 李华
网站建设 2026/6/10 14:10:34

LangFlow短视频脚本创作工作流

LangFlow&#xff1a;用可视化工作流重塑短视频脚本创作 在内容为王的时代&#xff0c;短视频平台每天涌出数百万条新视频&#xff0c;而背后的创作者却常常卡在一个最基础的环节——写不出爆款脚本。 即便有创意灵感&#xff0c;也难逃反复修改、风格不统一、产出效率低的困境…

作者头像 李华
网站建设 2026/6/10 15:56:18

LangFlow企业文化宣传文案生成器

LangFlow&#xff1a;让AI工作流“看得见、摸得着”的可视化引擎 在大模型时代&#xff0c;构建一个能对话、会检索、可推理的智能系统早已不再是科研实验室的专属任务。越来越多的企业和开发者希望快速搭建基于LLM的应用——比如客服机器人、知识助手或自动化文案生成器。但现…

作者头像 李华
网站建设 2026/6/9 23:48:42

LangFlow歌词生成与押韵检查系统

LangFlow歌词生成与押韵检查系统 在AI技术不断渗透创意产业的今天&#xff0c;音乐创作正经历一场静默却深刻的变革。过去依赖灵感与反复打磨的歌词写作&#xff0c;如今可以通过智能系统实现高效辅助——不仅能快速生成符合主题和情绪的文本&#xff0c;还能自动校验押韵、节奏…

作者头像 李华
网站建设 2026/6/10 15:57:32

3、Direct3D开发入门指南

Direct3D开发入门指南1. 计算着色器&#xff08;Compute Shader&#xff09;阶段计算着色器&#xff08;也称为DirectCompute&#xff09;是一个可选的可编程阶段&#xff0c;它可以在多个线程上执行着色器程序。在执行时&#xff0c;它可以选择性地传入一个调度线程标识符&…

作者头像 李华
网站建设 2026/6/10 15:57:55

LangFlow儿童故事创作助手

LangFlow儿童故事创作助手 在教育科技快速发展的今天&#xff0c;越来越多的教师和家长开始探索如何利用人工智能激发孩子的创造力。一个常见的场景是&#xff1a;老师希望学生输入“会飞的小象”或“害羞的兔子”这样的关键词&#xff0c;就能自动生成一则情节简单、语言生动的…

作者头像 李华