[英]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.