求最大的矩形的面积,动态规划,找出向做延伸的最大宽度l,和向右延伸的最大宽度h,然后求(h-l+1)*a[i] ,答案是最大的那个!
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include <iostream>
#include<queue>
#include<stack>
#include<string>
typedef __int64 L;
using namespace std;
L a[100100];
L b[100100];
L l[100100];
L h[100100];
int main()
{
int t;
while(cin>>t,t!=-1)
{
for(int i=1;i<=t;i++)
cin>>b[i]>>a[i];
l[1] = 1;
for(int i = 2;i<=t;i++)
{
int ans = i;
while(ans-1>=1&&a[i]<=a[ans-1])
ans = l[ans-1];
l[i] = ans;
}
h[t] = t;
for(int i = t-1;i>=1;i--)
{
int ans = i;
while(ans+1<=t&&a[ans+1]>=a[i])
ans = h[ans+1];
h[i] = ans;
}
L max = 0;
for(int i=1;i<=t;i++)
{
int wid = 0;
for(int j=l[i];j<=h[i];j++)
{
wid+=b[j];
}
if(wid*a[i]>max)
max = wid*a[i];
}
printf("%I64d\n",max);
}
return 0;
}