01:查找最接近的元素

简介: http://noi.openjudge.cn/ch0111/01/01:查找最接近的元素总时间限制: 1000ms 内存限制: 65536kB描述在一个非降序列中,查找与给定值最接近的元素。

http://noi.openjudge.cn/ch0111/01/

01:查找最接近的元素

总时间限制: 
1000ms
内存限制: 
65536kB
描述

在一个非降序列中,查找与给定值最接近的元素。

输入
第一行包含一个整数n,为非降序列长度。1 <= n <= 100000。
第二行包含n个整数,为非降序列各元素。所有元素的大小均在0-1,000,000,000之间。
第三行包含一个整数m,为要询问的给定值个数。1 <= m <= 10000。
接下来m行,每行一个整数,为要询问最接近元素的给定值。所有给定值的大小均在0-1,000,000,000之间。
输出
m行,每行一个整数,为最接近相应给定值的元素值,保持输入顺序。若有多个值满足条件,输出最小的一个。
样例输入
3
2 5 8
2
10
5
样例输出
8
5
 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 int main(int argc, char *argv[])
 4 {
 5     int n,i,*a,m,t;
 6     int begin,end,mid;
 7     int x,y;
 8     
 9     scanf("%d",&n);
10     a=(int *)malloc(n*sizeof(int));
11     for(i=0;i<n;i++) scanf("%d",&a[i]);
12     
13     scanf("%d",&m);
14     for(i=0;i<m;i++)
15     {
16         scanf("%d",&t);
17         if(a[0]>t) { printf("%d\n",a[0]); continue;}
18         else if(a[n-1]<t) { printf("%d\n",a[n-1]); continue;}
19         
20         begin=0;
21         end=n-1;
22         mid=(begin+end)/2;
23         while(begin<=end)   //while(end-begin>1)
24         {
25             if(a[mid]==t) { printf("%d\n",a[mid]);break;}
26             else 
27             {
28                 if(a[mid]>t)
29                 {
30                     end=mid-1;
31                 }
32                 else 
33                 {
34                     begin=mid+1;
35                 }
36             }
37             mid=(begin+end)/2;
38         }
39         if(a[mid]!=t)
40         {
41             x=abs(a[begin]-t);
42             y=abs(a[end]-t);
43             if(x<y) printf("%d\n",a[begin]);
44             else if(x>y) printf("%d\n",a[end]);
45             else printf("%d\n",(a[begin]<a[end]?a[begin]:a[end]));
46         }
47     }
48     free(a);
49     return 0;
50 }

 

相关文章
AutoJs4.1.0实战教程---抖音极速版
AutoJs4.1.0实战教程---抖音极速版
420 0
|
安全 Java 数据安全/隐私保护
通过java实现ldap修改AD域用户密码(最新,详细)
环境及说明,AD证书安装过程,AD证书的导出与导入,AD证书导入java密钥库中,java实现ldap改密
22623 0
|
12月前
|
机器学习/深度学习 人工智能 搜索推荐
AI在医疗诊断中的应用与未来发展趋势分析
【10月更文挑战第9天】 本文深入探讨了人工智能(AI)在医疗诊断领域的现状及其应用,包括影像识别、临床数据处理及个性化治疗方案的制定。通过具体案例分析,展示了AI技术如何提高诊断准确性、缩短诊断时间,并减轻医生的工作负担。同时,本文还讨论了AI在医疗诊断中面临的伦理问题和法律障碍,以及解决这些问题的可能途径。最后,对AI在未来医疗行业中的发展潜力进行了展望,指出其在提升医疗服务质量和效率方面的巨大潜力。
908 2
|
12月前
|
Ubuntu 搜索推荐 应用服务中间件
Nginx安装与使用
Nginx安装与使用
|
消息中间件 SQL 容灾
深度剖析 RocketMQ 5.0,消息进阶:如何支撑复杂业务消息场景?
本文主要学习 RocketMQ 的一致性特性,一致性对于交易、金融都是刚需。从大规模复杂业务出发,学习 RocketMQ 的 SQL 订阅、定时消息等特性。再从高可用的角度来看,这里更多的是大型公司对于高阶可用性的要求,如同城容灾、异地多活等。
109210 287
|
异构计算 索引
单卡A100实现百万token推理,速度快10倍,这是微软官方的大模型推理加速
【7月更文挑战第24天】针对大语言模型(LLM)处理长上下文时的计算瓶颈,微软推出MInference,基于动态稀疏注意力加速预填充,使8B参数模型处理1M token从30分钟降至3分钟,推理延迟降低10倍。通过识别注意力矩阵模式(A形、斜线、块稀疏),仅计算关键权重,无需修改预训练或微调。实验证明,MInference在多个任务和模型上保持准确度,但可能不适用所有LLM类型,存在轻微性能损失风险。
611 17
|
Python C++ 前端开发
PyTorch 2.2 中文官方教程(十一)(1)
PyTorch 2.2 中文官方教程(十一)
367 1
PyTorch 2.2 中文官方教程(十一)(1)
|
存储 边缘计算 数据处理
边缘计算与工业自动化
**摘要:** 随着工业4.0,边缘计算成为工业自动化的关键。它将计算推向网络边缘,提升实时数据处理、设备监控、安全性及生产调度。通过本地分析减少延迟,增强故障预测,保障数据安全,优化生产效率,边缘计算驱动制造业转型,塑造智能自动化未来。
|
Python C++ PyTorch
PyTorch 2.2 中文官方教程(十一)(2)
PyTorch 2.2 中文官方教程(十一)
219 1
|
机器学习/深度学习 编解码 自然语言处理
基于EasyCV复现ViTDet:单层特征超越FPN
ViTDet其实是恺明团队MAE和ViT-based Mask R-CNN两个工作的延续。MAE提出了ViT的无监督训练方法,而ViT-based Mask R-CNN给出了用ViT作为backbone的Mask R-CNN的训练技巧,并证明了MAE预训练对下游检测任务的重要性。而ViTDet进一步改进了一些设计,证明了ViT作为backone的检测模型可以匹敌基于FPN的backbone(如SwinT和MViT)检测模型。