预处理出右边Aj,然后扫一遍即可
NYOJ要用 long long...
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int N = 100000 + 10;
typedef __int64 ll;
struct node{
ll val, pos;
}p[N];
ll a[N];
int main()
{
int tot;
for( scanf("%d", &tot); tot--; )
{
int n;
scanf("%d", &n);
for( ll i = 1; i <= n; i++ )
{
scanf("%I64d", &a[i]);
}
p[n].val = a[n];
p[n].pos = n;
for( ll i = n-1; i; i-- )
{
if( a[i] <= p[i].val )
{
p[i].val = a[i];
p[i].pos = i;
}
else
p[i] = p[i+1];
}
ll tmp = a[1] - 1;
ll x = 1, y = 2;
ll ans = a[1] - a[2];
for( ll i = 1; i < n; i++ )
{
if( a[i] > tmp )
{
tmp = a[i];
if( tmp - p[i+1].val > ans )
{
ans = tmp - p[i].val;
x = i, y = p[i+1].pos;
}
}
}
printf("%I64d %I64d %I64d\n", ans, x, y);
}
return 0;
}