From 52d507339ce64e8d4c9e946643359d0bdbd26287 Mon Sep 17 00:00:00 2001 From: Piyush Gupta Date: Wed, 30 Oct 2019 21:56:37 +0530 Subject: [PATCH] largest rectangle in histogram --- Arrays/LargestRectangleInHistogram.cpp | 44 ++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Arrays/LargestRectangleInHistogram.cpp diff --git a/Arrays/LargestRectangleInHistogram.cpp b/Arrays/LargestRectangleInHistogram.cpp new file mode 100644 index 0000000..d68d25b --- /dev/null +++ b/Arrays/LargestRectangleInHistogram.cpp @@ -0,0 +1,44 @@ +#include +#include + +using namespace std; + +int largestRectangleArea(vector& heights) +{ + heights.push_back(0); + int n = heights.size(); + stack stk; + int ans = 0; + for (int i = 0; i < n; i++) { + if (stk.empty() || heights[stk.top()] <= heights[i]) + stk.push(i); + else { + while (!stk.empty() && heights[stk.top()] > heights[i]) { + int barHeight = heights[stk.top()]; + stk.pop(); + int area = 0; + if (stk.empty()) + area = i * barHeight; + else + area = (i - 1 - (stk.top() + 1) + 1) * barHeight; + ans = max(ans, area); + } + stk.push(i); + } + } + return ans; +} + +int main() { + vector array; + + int number; + + while (cin >> number) { + array.push_back(number); + } + + cout << largestRectangleArea(array) << endl; + + return 0; +}