題目:http://acm.hdu.edu.cn/showproblem.php?pid=1506
題目要求求出最大的面積,那就從左向右檢索
例
2 1 2 2
思路:知道假如一直是 1 2 3 4這樣遞增的情況,那麼面積就是
41或32或23或41中最大的那個
代入例子中,先放入2
2
1:21(高度乘以長度)
放入1 發現1比2小,後面無論多大也無法再與第一個2聯動了
所以把2也變成1
1 1
所以2:12
然後
1 1 2
3:21或13
然後以此類推
代碼:
#include<iostream>
#include<algorithm>
using namespace std;
long long a[100010];
long long b[100010];
int w[100010];
int main()
{
int k = 0;
int n;
while (cin >> n)
{
long long last = 0;
if (n == 0)
{
break;
}
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
a[n+1]=0;
for (int i = 1; i <= n + 1; i++)
{
if (a[i] > b[k])
{
b[++k] = a[i];
w[k] = 1;
}
else
{
int width = 0;
while (a[i] <= b[k] && k)
{
width += w[k];
last = max((long long)width*b[k], last);
k--;
}
w[++k] = width + 1;
b[k] = a[i];
}
}
cout << last << endl;
}
return 0;
}
1 1不能放2個1,要變成width爲2的1,然後這樣算下去就對