有 n 个数组成的数组,记为 a1,a2,,...,an。
将此数组分成前后 2 部分,前 m 个数组成左半部分,a1,a2,...,am,其余数字组成右半部分 am+1,am+2,...,an ,满足 1≤m<n。
然后在这 2 部分中各自选出最大元素(假设前后部分最大值分别为 maxA , maxB)进行 PK,即计算 maxA−maxB。
请问该如何选取 m,使得它们的差的绝对值 ∣maxA−maxB∣ 最大
第 1 行包含一个整数n(N <= 2000000)
第 2 行包含 n 个int范围内的整数,空格隔开
一个整数,表示 ∣maxA−maxB∣ 可以取到的最大值
4
2 1 4 3
2
数据范围
1≤n≤2×106
为什么73分awa
#include<bits/stdc++.h>
using namespace std;
long long n,maxa,maxb,m=0,maxx,a[2000010],l[2000010],r[2000010];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
l[i]=max(a[i],l[i-1]);
}
r[n]=a[n];
for(int i=n-1;i>=1;i--){
r[i]=max(r[i+1],a[i]);
}
maxx=0;
for(int i=1;i<n;i++){
maxx=max(maxx,abs(l[i]-r[i + 1]));
}
cout<<maxx;
return 0;
}