#include <bits/stdc++.h>
using namespace std;
map<long long,long long> mp;
map<long long,long long> ::iterator it;
long long a[50050],ans[50050];
int main()
{
long long n,i,as,tmp;
while(cin>>n)
{
for(i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
ans[i]=a[i];
}
mp.clear();
for(i=1;i<=n;i++)
{
it=mp.lower_bound(a[i]);
if(it==mp.end())
{
mp[a[i]]=i;
continue;
}
ans[i]+=(i-(it->second))*a[i];
tmp=i;
it=mp.upper_bound(a[i]);
while(it!=mp.end())
{
tmp=min(tmp,it->second);
mp.erase(mp.upper_bound(a[i]));
it=mp.upper_bound(a[i]);
}
if(!mp[a[i]])
mp[a[i]]=tmp;
}
mp.clear();
for(i=n;i>=1;i--)
{
it=mp.lower_bound(a[i]);
if(it==mp.end())
{
mp[a[i]]=i;
continue;
}
ans[i]+=((it->second)-i)*a[i];
tmp=i;
it=mp.upper_bound(a[i]);
while(it!=mp.end())
{
tmp=max(tmp,it->second);
mp.erase(mp.upper_bound(a[i]));
it=mp.upper_bound(a[i]);
}
if(!mp[a[i]])
mp[a[i]]=tmp;
}
as=0;
for(i=1;i<=n;i++)
as=max(as,ans[i]);
printf("%lld\n",as);
}
}
51nod 1102 面积最大的矩形
最新推荐文章于 2019-10-24 21:39:12 发布