根据这个图可以知道,层数越深,它的值总体上时变大的;同一层中,越接近中间位置的数越大。对于本题来说,该怎么考虑呢?
-
假设,我们拿到了两组数据;
-
当两组数据的都在同一层时,我们只需要考虑他们哪一个更接近层数*1.0/ 2,距离越近的数越大
-
当他们不在同一层中怎么考虑?假设第一组数据比第二组数据大,并且第一组数据的层数还更小,那么有且只有 一种可能,第一组数据更靠近中间。由于这些数据都是从同一个数组中取出来的,所以我们一定可以构造出一组数据:使用第二组的层数,使用第一组的列数;这样的一组数据肯定是最大的,
-
因此,我们可以得到,最大值一定出现在最后一层靠近中间的位置
-
代码实现:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
int n;
cin>>n;
vector<ll> v(n+1);
for(int i=1;i<=n;i++) cin>>v[i];
sort(v.begin()+1,v.end());
double val = v[n]*1.0/2;//最中间的值
double mina = 10000000000;
int ans = v[n-1];
for(int i=1;i<n;i++){
if(fabs(val - v[i])<=mina){
mina = fabs(val - v[i]);
ans = v[i];
}
}
cout<<v[n]<<' '<<ans<<'\n';
}