news 2026/6/11 10:37:25

寒假集训5——二分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
寒假集训5——二分

这三题我都超时了,优化完可能会再上传。这些都不是AC代码,请批判性查阅,轻喷!!!

1.B2166 查找不重复元素出现的位置

题目描述

输入 n 个不超过 109 的严格递增的正整数组成的数列 a1​,a2​,…,an​,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中出现的下标。如果序列中不包含该数字,请输出 −1 。

注意:下标从 1 开始。

输入格式

第一行,包含两个正整数 n 和 m,分别表示数列的长度和询问的次数。

第二行,包含 n 个正整数 a1​,a2​,…,an​。

接下来 m 行,每行包含一个正整数 q,表示一次询问。

输出格式

输出共 m 行。

对于每次询问,如果数字 q 存在于数列中,则输出它在数列中的下标;如果不存在,则输出 −1。

输入输出样例

输入 #1复制运行

5 4 10 20 30 40 50 30 10 50 35

输出 #1复制运行

3 1 5 -1

说明/提示

对于所有测试点,保证:

  • 1≤n,m≤106
  • 1≤ai​,q≤109
  • 对于 1≤i<n,保证 ai​<ai+1​。

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

#include<iostream> using namespace std; const int N = 1e6 + 10; int arr[N]; int Find(int x, int arr[], int n) { int l = 1; int r = n; int m = l + (r - l) / 2; if (arr[l] == x) return l; if (arr[r] == x) return r; while (l <= r) { m= l + (r - l) / 2; if (arr[m] < x) l = m + 1; else if (arr[m] > x) r = m - 1; else return m; } return -1; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, m, q; cin >> n >> m; for (int i = 1;i <= n;i++) cin >> arr[i]; while (m--) { cin >> q; cout << Find(q,arr,n) << endl; } return 0; }

2.B2167 查找最后一个出现的位置

题目描述

输入一个长度为 n 的非递减正整数数列 a1​,a2​,…,an​,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中最后一次出现的下标。如果序列中不包含该数字,请输出 −1 。

注意:下标从 1 开始。

输入格式

第一行,包含两个正整数 n 和 m,分别表示数列的长度和询问的次数。

第二行,包含 n 个正整数 a1​,a2​,…,an​。

接下来 m 行,每行包含一个正整数 q,表示一次询问。

输出格式

输出共 m 行。

对于每次询问,如果数字 q 存在于数列中,则输出它在数列中最后一次出现的下标;如果不存在,则输出 −1。

输入输出样例

输入 #1复制运行

8 5 2 3 5 5 5 8 9 9 5 2 9 6 8

输出 #1复制运行

5 1 8 -1 6

说明/提示

样例解释

数列为 [2,3,5,5,5,8,9,9]。

  1. 询问 5:数字 5 最后一次出现在第 5 个位置。
  2. 询问 2:数字 2 最后一次出现在第 1 个位置。
  3. 询问 9:数字 9 最后一次出现在第 8 个位置。
  4. 询问 6:数列中不存在 6。
  5. 询问 8:数字 8 最后一次出现在第 6 个位置。

数据范围

对于所有测试点,保证:

  • 1≤n,m≤106
  • 1≤ai​,q≤109
  • 对于 1≤i<n,保证 ai​≤ai+1​。

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

这题优化到这样已经是我想到的最优了,真想不到别的办法了。主要是我觉得新的下标会覆盖旧的,所以mp里面存的就是最新的下标,而且这肯定比二分快,也就只开了一个数组 。超时也不是内存超限,证明就是快读快写的问题。然后我想过用scanf和printf优化,还想过解除绑定优化,然后还是不成功。

#include<stdio.h> const long long N = 1e9 + 10; int mp[N]; int main() { int n, m, q; scanf("%d%d",&n,&m); for (int i = 1;i <= n;i++) { int x; scanf("%d",&x); //新的下标会覆盖旧的 mp[x] = i; } while (m--) { scanf("%d",&q); if (mp[q] > 0) printf("%d\n",mp[q]); else printf("-1\n"); } return 0; }

3.P2249 【深基13.例1】查找

题目描述

输入 n 个不超过 109 的单调不减的(就是后面的数字不小于前面的数字)非负整数 a1​,a2​,…,an​,然后进行 m 次询问。对于每次询问,给出一个整数 q,要求输出这个数字在序列中第一次出现的编号,如果没有找到的话输出 −1 。

输入格式

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

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

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

输出格式

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

输入输出样例

输入 #1复制运行

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

输出 #1复制运行

1 2 -1

说明/提示

数据保证,1≤n≤106,0≤ai​,q≤109,1≤m≤105

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

#include<iostream> using namespace std; const int N=1e6+10; int arr[N]; const int N1=9e8; int mp[N1*2]; int main() { int n,m,q; scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&arr[i]); for(int i=n;i>=1;i--) mp[arr[i]]=i; while(m--) { scanf("%d",&q); if(mp[q]>0) printf("%d ",mp[q]); else printf("-1 "); } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:17:41

​ Android 基础入门教程​3.8 Gestures(手势)

3.8 Gestures(手势) 分类 Android 基础入门教程 本节引言&#xff1a; 周六不休息&#xff0c;刚剪完了个大平头回来&#xff0c;继续码字~ 好的&#xff0c;本节给大家带来点的是第三章的最后一节——Gestures(手势)&#xff0c; 用过魅族手机的朋友相信对手势肯定是不陌生…

作者头像 李华
网站建设 2026/6/6 6:32:13

什么是Redis的大Key和热Key?你们的项目一般是怎么解决的?

一、首先我们要搞清楚大key和热key是什么。 1. 大Key 通常以Key的大小和Key中成员的数量来综合判定。比如Key本身的Value过大&#xff0c;一个String类型的Key&#xff0c;它的值为10 MB&#xff1b;Key中的成员数过多&#xff1a;一个ZSET类型的Key&#xff0c;它的成员数量为…

作者头像 李华
网站建设 2026/6/5 12:40:40

基于WEB的超市销售管理系统设计 开题报告

目录研究背景与意义系统目标关键技术预期功能模块创新点研究方法进度计划参考文献项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作研究背景与意义 随着电子商务和数字化管理的普及&#xff0c;传统超市需通…

作者头像 李华
网站建设 2026/5/29 13:46:22

利用AI提升开题报告质量,大幅减少人工修改时间

工具对比速览 工具名称 核心功能 适用场景 效率评分 特色优势 AIBiYe 开题报告生成/降重 中文论文全流程 ★★★★★ 国内院校适配度高 AICheck 初稿生成/格式检查 快速产出框架 ★★★★☆ 结构化输出优秀 AskPaper 文献综述辅助 外文文献处理 ★★★★ 跨…

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

代码重构指南:优化建议系统

代码重构指南&#xff1a;优化建议系统关键词&#xff1a;代码重构、优化建议系统、代码质量、软件开发、算法原理、实战案例摘要&#xff1a;本文围绕代码重构的优化建议系统展开&#xff0c;旨在为开发者提供全面的技术指导。首先介绍了代码重构及优化建议系统的背景&#xf…

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

从 TCP 到 HTTP 再到 RPC:网络协议的三次抽象革命

从 TCP 到 HTTP 再到 RPC:网络协议的三次抽象革命 这是一个非常经典、也极其容易被误解的问题。 很多讨论都会演变成: HTTP 和 RPC 谁更先进? gRPC 是不是要取代 REST? TCP 既然这么强,为什么还要搞这么多协议? 真正的答案只有一句话: 它们不是替代关系,而是一次又一…

作者头像 李华