您的位置:首页 > 其它

华东交通大学2017年ACM“双基”程序设计竞赛 1008

2017-11-18 18:21 239 查看

Problem Description

长度为 n 的序列,把它划分成两段非空的子序列,定义权值为:两段子序列的最大值的差的绝对值。求可能的最大的权值。
数据范围:
2 <= n <= 10^6 , 0 < 序列内的数 <= 10^6 。

Input

第一行输入一个 T,表示有 T 组数据。
接下来有 T 组数据,每组数据的第一行输入一个数 n ,第二行输入 n 个数。

Output

每组数据输出可能的最大的权值。

Sample Input

1
3
1 2 3


Sample Output

2

解法:暴...暴力


#include<bits/stdc++.h>
using namespace std;
int cnt[1234567];
int Max_a[1234567];
int Max_b[1234567];
int Min=0;
int main(){
int t,n;
scanf("%d", &t);
while(t--){
Min=0;
memset(Max_a, 0, sizeof(Max_a));
memset(Max_b, 0, sizeof(Max_b));
scanf("%d",&n);
for(int i = 1; i <= n; i++){
scanf("%d", &cnt[i]);
Max_a[i] = max(Max_a[i - 1], cnt[i]);
}
for(int i = n; i > 0; i--){
Max_b[i] = max(Max_b[i + 1], cnt[i]);
}

for(int i = 1; i < n; i++){
Min = max(Min, abs(Max_a[i] - Max_b[i + 1]));
}
printf("%d\n", Min);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: