这题看了题解之后写的。
我自己根本不可能写出来。
因为数组边界没有初始化导致一直超时。
在很多问题中都要注意初始化!
代码如下。
#include <stdio.h>
#include <string.h>
long long a[100001];
int l[100001];
int r[100001];
int main()
{
int n;
int i;
long long max;
while (scanf("%d", &n) && n)
{
for (i = 1; i <= n; i++)
{
scanf("%I64d", &a[i]);
l[i] = r[i] = i;
}
for (i = 2; i <= n; i++)
{
while (l[i] - 1 >= 1 && a[i] <= a[l[i] - 1])
l[i] = l[l[i] - 1];
}
for (i = n - 1; i >= 1; i--)
{
while (r[i] + 1 <= n && a[i] <= a[r[i] + 1])
r[i] = r[r[i] + 1];
}
max = -1;
for (i = 1; i <= n; i++)
max = max > (a[i] * (r[i] - l[i] + 1)) ? max : (a[i] * (r[i] - l[i] + 1));
printf("%I64d\n", max);
}
return 0;
}