news 2026/2/28 3:55:37

寒假集训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/2/26 17:13:25

Markdown是什么,为什么会流行?

markdown已经和英语、Python一样&#xff0c;成为AI的沟通语言了。 现在到处在讨论什么skills、mcp、agent等&#xff0c;好像哪怕一个纯技术小白也能用ai做开发&#xff0c;我认为任何一个人在ai时代需要掌握三门“语言”&#xff0c;不然搞ai会很难受&#xff0c;这三门语言…

作者头像 李华
网站建设 2026/2/16 14:17:01

基于深度学习YOLOv12的安全锥识别检测系统(YOLOv12+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)

一、项目介绍 本文基于YOLOv12深度学习框架&#xff0c;设计并实现了一套高效的安全锥识别检测系统。该系统通过集成YOLOv12算法、定制化的YOLO数据集&#xff08;包含训练集5960张、验证集341张和测试集170张&#xff09;以及用户友好的UI界面&#xff0c;实现了对安全锥目标…

作者头像 李华
网站建设 2026/2/20 17:20:48

基于WEB的汽车销售管理系统 开题报告

目录 系统概述技术架构核心功能模块创新点预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 系统概述 基于WEB的汽车销售管理系统旨在通过数字化手段优化汽车销售流程&#xff0c;涵盖车辆库存管理…

作者头像 李华
网站建设 2026/2/17 14:04:59

如何处理Redis集群数据倾斜?

在正常情况下&#xff0c;各数据分片节点的Key数量是均匀分布的&#xff0c;同时内存使用率、CPU使用率等性能指标也是相近的。一般是在使用Redis的过程中&#xff0c;设计考虑不周、不规范的数据写入及突发的访问量&#xff0c;造成redis个别的节点数据量倾斜或数据访问倾斜&a…

作者头像 李华
网站建设 2026/2/27 18:54:13

人形机器人新产品导入(NPI)工程师的角色与技能解析

芯联集成电路制造股份有限公司 人形机器人NPI (J10588)职位信息 工作职责: 1. 主导机器人新产品装配工艺设计与样品试做,梳理并解决试做问题(如关节精度、传感器集成等),推动问题闭环,支撑批量生产。 2. 开展机器人新产品工艺评审与可制造性评估,识别潜在风险点并优化结构…

作者头像 李华