HDU ACM 16 1506 Largest Rectangle in a Histogram

#include 
#define LL long long
using namespace std;
const int q = 100010;
int Hui[q], Yi[q];
LL Lu[q];
int main()
{
	int n;
	while (cin >> n && n)
	{
		LL Maxx = 0;
		for (int i = 1; i <= n; i++)
		{
			cin >> Lu[i];
			Hui[i] = Yi[i] = 1;
		}
		for (int i = 2; i <= n; i++)
		{
			int j = i - 1;
			while (Lu[i] <= Lu[j] && j >= 1)
			{
				Hui[i] += Hui[j];
				j = j - Hui[j]; //继续寻找
			}
		}
		for (int i = n - 1; i >= 1; i--)
		{
			int j = i + 1;
			while (Lu[i] <= Lu[j] && j <= n)
			{
				Yi[i] += Yi[j];
				j = j + Yi[j];
			}
		}
		for (int i = 1; i <= n; i++)
		{
			LL temp = (Lu[i] * (Hui[i] + Yi[i] - 1));
			if (Maxx < temp)
				Maxx = temp;
		}
		cout << Maxx << endl;
	}
	return 0;
}

你可能感兴趣的:(HDU ACM 16 1506 Largest Rectangle in a Histogram)