请求帮助,这道题
代码运行时错误(数组越界、STL容器越界、死循环、除以0、未使用题目要求的文件读写)
compiled successfully
time: -8ms, memory: 3432kb, score: 20, status: Runtime Error
- 查找最接近的元素
题目ID:9332必做题50分
时间限制: 1000ms
空间限制: 65536kB
题目描述
在一个非降序列中,查找与给定值最接近的元素
输入格式
第一行一个整数 n,第二行 n个整数 a[i]表示要查找的有序数列,第三行若干个整数 m[i]表示要询问最接近元素的给定值(最多有S个)。
输出格式
对于每一个 m[i]输出其最接近相应给定值的元素值,若有多个值满足条件,输出最小的一个,用空格间隔。
数据范围
0<n≤10的6次方
0<a[i]≤10的9次方
0≤m[i]≤10的9次方
0<S≤10000。
输入格式
4
2 5 9 10
1 2 3 7
输出格式
2 2 2 5
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
#include<climits>
#include<cstring>
#include<string>
#include<algorithm>
#include<functional>
#include<list>
using namespace std;
const int n=1e9+5;
int a[n];
int main(){
int n,m;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(cin>>m){
int left,right;
left=1;
right=n;
while(left<right){
int middle=(left+right)/2;
if(a[middle]>=m){
right=middle;
}
else{
left=middle+1;
}
}
if(a[left]==m){
cout<<a[left]<<" ";
}
else if(left-1!=0&&m-a[left-1]<=a[left+1]-m){
cout<<a[left-1]<<" ";
}
else if(m-a[left-1]<=a[left+1]-m&&left-1==0){
cout<<a[left]<<" ";
}
else{
cout<<a[left+1]<<" ";
}
}
return 0;
}
我觉得书数据范围的原因,但不会修改