题目:https://codeforces.com/contest/1554/problem/A
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 t (1≤t≤10000) — the number of test cases.
The first line of each test case contains a single integer n (2≤n≤105).
The second line of each test case contains n integers a1,a2,…,an (1≤ai≤106).
It is guaranteed that the sum of n over all test cases doesn’t exceed 3⋅105.
Output
For each test case, print a single integer — the maximum possible value of the product from the statement.
Example
input
4
3
2 4 3
4
3 2 3 1
2
69 69
6
719313 273225 402638 473783 804745 323328
output
12
6
4761
381274500335
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.
In the second test case, the maximum is f(1,2)=f(1,3)=f(2,3)=6.
思路:
就是求两个相邻数乘积的最大值
AC代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long ll;
int main(){
ios_base::sync_with_stdio(false);
int t; cin >> t;
while(t--){
int n;
cin >> n;
vector<ll> num(n+1);
for(int i = 1;i<=n;i++){
cin >> num[i];
}
ll ans = 0;
for(int i = 1;i<=n;i++){
ans = max(ans,1ll * num[i] * num[i-1]);
}
cout << ans << endl;
}
return 0;
}