查找最接近的元素 请求帮助

请求帮助,这道题
代码运行时错误(数组越界、STL容器越界、死循环、除以0、未使用题目要求的文件读写)
compiled successfully
time: -8ms, memory: 3432kb, score: 20, status: Runtime Error

  1. 查找最接近的元素
    题目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;
}

我觉得书数据范围的原因,但不会修改

我也很无奈~~
改了二十几次都是TLE

#include<iostream>
#include<iomanip>
#include<algorithm>
using namespace std;
int mina=2147483647;
int main()
{
	int n;
	cin>>n;
	int a[1000005],b;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	while(cin>>b)
	{
      int minn;
		for(int i=1;i<=n;i++)
		{
            minn=a[1];
			int c=abs(b-a[i]);
			if(mina>c)
			{
				mina=c;
				minn=a[i];
			}
			else if(mina==c)
			{
				if(minn>a[i])
				{
					minn=a[i];
				}
			}
		}
		cout<<mina<<" ";
	}
	return 0;
}
:sob: :sob: :sob:

听一下老师的讲解吧,老师快开讲了

1 个赞

你这是想打表情包吧
@何羽帆

1 个赞

hi