链接:https://vjudge.net/problem/POJ-2082#author=0
题意:
挨个给n个矩形的宽和高,求内部矩形的最大面积
思路:
单调栈,每次tmp记录出栈的总宽度。记录到下一次出栈要增加的宽度。
代码:
#include <iostream> #include <memory.h> #include <vector> #include <map> #include <algorithm> #include <cstdio> #include <math.h> #include <queue> #include <string> #include <stack> using namespace std; typedef long long LL; const int MAXN = 5e4 + 10; struct Squere { int _w; int _h; }squ[MAXN]; int main() { int n; while (scanf("%d", &n)) { if (n == -1) break; for (int i = 1;i <= n;i++) scanf("%d%d", &squ[i]._w, &squ[i]._h); stack<Squere> r; int res = 0; for (int i = 1;i <= n;i++) { int tmp = 0; while (!r.empty() && r.top()._h > squ[i]._h) { Squere f = r.top(); r.pop(); res = max(res, f._h * (f._w + tmp)); squ[i]._w += f._w; tmp += f._w; } r.push(squ[i]); } while (!r.empty()) { Squere f = r.top(); r.pop(); res = max(res, f._h * f._w); if (!r.empty()) r.top()._w += f._w; } printf("%d ", res); } return 0; }