作者 郭天宸
单位 山东大学(威海)
_October has a question:
You are given n integers a1,a2,…,an. Find the maximum value of max(al,al+1,…,ar)⋅min(al,al+1,…,ar)over all pairs (l,r) of integers for which 1≤l<r≤n.
INPUT:
The first line contains a single integer n(2≤n≤103) .
The second line contains n integers a1,a2,…,an(1≤ai≤106).
OUTPUT:
Please print a single integer — the maximum possible value of the product from the statement.
SAMPLE INPUT1:
3
2 4 3
SAMPLE OUTPUT1:
12
Note:
Let f(l,r)=max(al,al+1,…,ar)⋅min(al,al+1,…,ar).
In the first test case,
f(1,2)=max(a1,a2)⋅min(a1,a2)=max(2,4)⋅min(2,4)=4⋅2=8.
f(1,3)=max(a1,a2,a3)⋅min(a1,a2,a3)=max(2,4,3)⋅min(2,4,3)=4⋅2=8.
f(2,3)=max(a2,a3)⋅min(a2,a3)=max(4,3)⋅min(4,3)=4⋅3=12.
So the maximum is f(2,3)=12.
SAMPLE INPUT2:
4
3 2 3 1
SAMPLE OUTPUT2:
6
- Advanced challenge :What if the maxinum of n is 3∗105 ?
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
栈限制
8192 KB
#include <stdio.h>
int main() {
long long n, arr[1000];
scanf("%lld", &n);
// 初始化数组赋值
for (int i = 0; i < n; ++i) {
long long temp;
scanf("%lld", &temp);
arr[i] = temp;
}
long long now_max = 0;
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
// 求出区间最大最小值
long long min = arr[i];
long long max = arr[j];
for (int k = i; k <= j; ++k) {
if (min > arr[k]) {
min = arr[k];
}
if (max < arr[k]) {
max = arr[k];
}
}
if (min * max > now_max) {
now_max = min * max;
}
}
}
printf("%lld", now_max);
return 0;
}