求调
  • 板块灌水区
  • 楼主lucy2012
  • 当前回复14
  • 已保存回复14
  • 发布时间2024/5/31 21:01
  • 上次更新2024/5/31 23:41:21
查看原帖
求调
1252442
lucy2012楼主2024/5/31 21:01

max值PK

题目描述

有 nn 个数组成的数组,记为 a1,a2,,...,ana_1,a_2,,...,a_n。

将此数组分成前后 22 部分,前 mm 个数组成左半部分,a1,a2,...,ama_1,a_2,...,a_m,其余数字组成右半部分 am+1,am+2,...,ana_{m+1},a_{m+2},...,a_n ,满足 1≤m<n1 \le m \lt n。

然后在这 22 部分中各自选出最大元素(假设前后部分最大值分别为 maxAmaxA , maxBmaxB)进行 PK,即计算 maxA−maxBmaxA - maxB。

请问该如何选取 mm,使得它们的差的绝对值 ∣maxA−maxB∣|maxA - maxB| 最大

输入格式

第 11 行包含一个整数nn(N <= 2000000)

第 22 行包含 nn 个int范围内的整数,空格隔开

输出格式

一个整数,表示 ∣maxA−maxB∣|maxA - maxB| 可以取到的最大值

样例 #1

样例输入 #1

4
2 1 4 3

样例输出 #1

2

提示

数据范围

1≤n≤2×1061 \le n \le 2 \times 10^6

为什么73分awaawa

#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;
}
2024/5/31 21:01
加载中...