繁体   English   中英

"<i>Maximize area of rectangle |<\/i>最大化矩形面积 |<\/b> <i>Maximum Rectangular Area in a Histogram<\/i>直方图中的最大矩形面积<\/b>"

[英]Maximize area of rectangle | Maximum Rectangular Area in a Histogram

我不明白为什么会发生分段错误。 请帮我解决它。 花了几个小时后,我才知道,当我从 nexS 返回时,如果我返回 arr1,那么它可以工作,但是如果我返回新创建的数组 arr,那么我会遇到运行时错误。 问题链接: https<\/a> :\/\/practice.geeksforgeeks.org\/problems\/maximum-rectangular-area-in-a-histogram-1587115620\/1#

#include<bits/stdc++.h>
using namespace std;

class Solution
{
    public:
    //Function to find largest rectangular area possible in a given histogram.
    long long* prevS(long long arr1[],int n)
    {   stack<long long> s;
       long long arr[n]={0};
        for(long long i=0;i<n;i++)
        {
            if(s.empty()){s.push(i); arr[i]=-1;}
            else
            {
                while(!s.empty() && arr1[s.top()]>=arr1[i])
                {
                    s.pop();
                }
                if(s.empty()) arr[i]=-1;
                else
                arr[i]=s.top();
                s.push(i);
            }
        }
       
        return arr;
    }
    long long* nexS(long long arr1[],int n)
    {   stack<long long> s;
        long long arr[n]={0};
        for(long long i=n-1;i>=0;i--)
        {
            if(s.empty()){s.push(i); arr[i]=n;}
            else
            {
                while(!s.empty() && arr1[s.top()]>=arr1[i])
                {
                    s.pop();
                }
                if(s.empty()) arr[i]=n;
                else
                arr[i]=s.top();
                s.push(i);
            }
        }
        
        return arr;
    }
    long long getMaxArea(long long arr[], int n)
    {
        // Your code here
        long long* pre=prevS(arr,n);
        long long* nex=nexS(arr,n);
        long long ans=INT_MIN;
        for(int i=0;i<n;i++)
        {
            ans=max(ans,arr[i]*(nex[i]-pre[i]-1));
        }
        return ans;
    }
};

int main()
{
long long t;
cin>>t;
while(t--)
{
int n;
cin>>n;
long long arr[n];
for(int i=0;i<n;i++)
cin>>arr[i];
Solution ob;
court<<ob.getMaxArea(arr,n)<<endl;
}
return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM