1.Problem
2082 -- Terrible Sets (poj.org)
2.Idea
Description is terrible but it was just simple max rectangle in histogram problem.
3.Source
int n;
int h[N];
int st[N], L[N], R[N], sum[N];
int maxRec() {
//L
int t = 0;
for (int i = 0; i < n; i++) {
while (t > 0 && h[st[t - 1]] >= h[i]) t--;
L[i] = (t == 0 ? 0 : (st[t - 1] + 1));
st[t++] = i;
}
//R
t = 0;
for (int i = n - 1; i >= 0; i--) {
while (t > 0 && h[st[t - 1]] >= h[i]) t--;
R[i] = (t == 0 ? n : st[t - 1]);
st[t++] = i;
}
int res = 0;
for (int i = 0; i < n; i++) {
res = max(res, h[i] * (sum[R[i]] - sum[L[i]]));
}
return res;
}
void solve()
{
while (cin >> n) {
if (n < 0) break;
for (int i = 0; i < n; i++) {
scanf("%d%d", &sum[i + 1], &h[i]);
}
for (int i = 0; i < n; i++)
sum[i + 1] += sum[i];
printf("%d\n", maxRec());
}
}
No comments:
Post a Comment