P2422 升级版,但是 UVA 太狗了。。。。。
#include <iostream>
#include <cstdio>
#define big long long
using namespace std;
big n,h[100005];
big stack[100005];
big sum[100005];
big ans = 0,ansl=1,ansr=1;
void f()
{
for(big i = 1;i <= n;i++)
{
scanf("%lld",h+i);
sum[i] = sum[i-1]+h[i];
}
big len=0;
h[n+1]=0;
sum[n+1]=sum[n];
for(big i = 1;i <= n+1;i++)
{
if(len == 0)
{
stack[++len] = i;
continue;
}
while(len != 0 && h[stack[len]] >= h[i])
{
big l;
big now = len;
if(len >= 2)
{
l = stack[len-1];
}
else
{
l = 0;
}
big x = (sum[i-1]-sum[l])*h[stack[now]];
if(x > ans || (x==ans && i-1-(l+1)<ansr-(ansl+1)) || (x==ans && i-1-(l+1) == ansr-(ansl+1) && l+2<ansl+1))
{
ans = x;
ansl = l+1, ansr = i-1;
}
len--;
}
stack[++len] = i;
}
}
int main()
{
scanf("%lld",&n);
f();
printf("%lld\n",ans);
printf("%lld %lld",ansl,ansr);
while(scanf("%lld",&n)!=EOF)
{
f();
printf("\n\n");
printf("%lld\n",ans);
printf("%lld %lld",ansl,ansr);
}
return 0;
}