#include<iostream>
#include<stack>
using namespace std;
void largestAreaUnderHistogram(int arr[], int n){
stack<int>s;
int area,ans[100],st;
for(int i=0;i<n;i++){
int curElement = arr[i];
if(s.empty()||arr[s.top()]<curElement){
s.push(i);
}
else{
st=s.top();
s.pop();
//comping areas
if(s.empty()){
area = arr[i]*i;
}
else{
area=arr[i]*(st-i+1);
}
}
while(s.empty()==false){
st=s.top();
s.pop();
//comping areas
if(s.empty()){
area = arr[i]*i;
}
else{
area=arr[i]*(st-i+1);
}
}
ans[i] = area;
}
int Max=0;
for(int i=0;i<n;i++){
cout<<ans[i]<<" ";
Max=max(Max,ans[i]);
}
cout<<"maxArea"<<Max;
}
int main(){
int arr[] = {6,2,5,4,5,1,6};
int n= sizeof(arr)/sizeof(int);
largestAreaUnderHistogram(arr,n);
return 0;}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0YWNrPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp2b2lkIGxhcmdlc3RBcmVhVW5kZXJIaXN0b2dyYW0oaW50IGFycltdLCBpbnQgbil7CiAgICBzdGFjazxpbnQ+czsKICAgIGludCBhcmVhLGFuc1sxMDBdLHN0Owpmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgIGludCBjdXJFbGVtZW50ID0gYXJyW2ldOwogICAgaWYocy5lbXB0eSgpfHxhcnJbcy50b3AoKV08Y3VyRWxlbWVudCl7CiAgICAgICAgcy5wdXNoKGkpOwogICAgfQogICAgZWxzZXsKICAgICAgIHN0PXMudG9wKCk7CiAgICAgICBzLnBvcCgpOwogICAgLy9jb21waW5nIGFyZWFzCiAgICAgICAgaWYocy5lbXB0eSgpKXsKICAgICAgICAgIGFyZWEgPSBhcnJbaV0qaTsKICAgICAgICB9CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgYXJlYT1hcnJbaV0qKHN0LWkrMSk7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlKHMuZW1wdHkoKT09ZmFsc2UpewogICAgICAgIHN0PXMudG9wKCk7CiAgICAgICAgcy5wb3AoKTsKICAgIC8vY29tcGluZyBhcmVhcwogICAgICAgIGlmKHMuZW1wdHkoKSl7CiAgICAgICAgICBhcmVhID0gYXJyW2ldKmk7CiAgICAgICAgfQogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGFyZWE9YXJyW2ldKihzdC1pKzEpOwogICAgICAgIH0KICAgIH0KICAgIGFuc1tpXSA9IGFyZWE7Cn0KaW50IE1heD0wOwpmb3IoaW50IGk9MDtpPG47aSsrKXsKICAgIGNvdXQ8PGFuc1tpXTw8IiAiOwogICAgTWF4PW1heChNYXgsYW5zW2ldKTsKfQpjb3V0PDwibWF4QXJlYSI8PE1heDsKfQoKaW50IG1haW4oKXsKaW50IGFycltdID0gezYsMiw1LDQsNSwxLDZ9OwppbnQgbj0gc2l6ZW9mKGFycikvc2l6ZW9mKGludCk7Cmxhcmdlc3RBcmVhVW5kZXJIaXN0b2dyYW0oYXJyLG4pOwpyZXR1cm4gMDt9Cg==