[프로그래밍 사고와 실천 Week5 작업 A가 최대 사각형]

주제 설명 :

히스토그램에 히스토그램에서 가장 큰 사각형 영역을 찾을 수 있습니다. 예를 들어, 왼쪽에서 오른쪽으로 히스토그램의 다음 상고 2, 1, 4, 5, 1, 3, 3, 그들은 넓은 1, 최대 사각형 음영되어있다.
그림 삽입 설명 여기

입력 형식 :

입력 데이터의 세트를 복수 포함하는 방법. 각 데이터 세트는 정수로 N 작은 직사각형 히스토그램 표현하면 생각할 수가 1 <= N <= 100000 다음 정수, ..., HN, 만족 0 <= 하이 <= 1000000000. 이러한을 H1 다음 N 왼쪽 히스토그램 높이의 각각의 작은 사각형의 디지털 표현을 오른쪽에 각각의 작은 사각형의 폭은 1이다. 끝에서 0으로 테스트 데이터.

샘플 입력 :

7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0

출력 형식 :

각 라인에 대한 테스트 데이터 출력 정수 않음을 나타낸다.

샘플 출력 :

8
4000

아이디어 :

최대 영역을 가지고 필요 초점 연성 우측으로 사각형의 최대 폭의 왼쪽 각 막대 그래프의 높이이다.
폭력 솔루션 아이디어는 왼쪽에 각각의 작은 사각형, 트래버스에서 시작 작은 사각형보다 먼저 짧은의 위치를 찾을 수, 전체 너비, 최대 값을 고려하여 현재 레코드 높은 비교의 가장 큰 면적 곱셈 사각형을 계산하는 것입니다. 그러나 의심이 타임 아웃 발생하지 않습니다. 따라서, 우리는 각각의 직사각형 확장 우측 및 좌측 하부 폭 시간을 획득하는 방법을 사용한다.
여기 모노톤 적층 방법을 사용하는 경우, 스택의 단순성을 유지하면서 각각의 직사각형 순차적 압입이 프레스 끼워 통과. 현재 요소 미만 스택 (스택 하부 단위에 스택 상단) 증가에 대한 상위 요소 팝업의 최상위 요소로 가압하고, 가압되도록 멀리 우측 요소로 연장되는 상부 요소의 위치를 결정할 수 -1 요소는 스택을 충족하도록 가압 될 때까지 단순성으로 가압한다. 역시 오른쪽 위치의 최상위 요소로 연장 스택의 나머지 요소들에 대한 모든 먼 위치를 통과 한 후 사각형. 그 오른쪽 위치의 다음 반복 후 결정됩니다.
또한 왼쪽의 위치를 결정하기 위해 확장 될 수있다이어서 이송 전후 증분 각 직사각형 스택, 유일한 차이점은 토출되는 상부 요소의 최대 위치가 좌측 위치에 +1을 확장 할 수있는 요소에 푸시하는 것을 인 비 1, 그것은 역방향 이송되기 때문이다.
그 시간은 선형 복잡성 레벨로 감소 될 수 있도록 각각의 연장 사각형의 폭을 요구 한 결과, 최대 영역을 얻기 위해 이송 될 수있다.

코드 :

#include <iostream>
using namespace std; 
const int size=1e5+10;
int n,a[size],L[size],R[size],st[size];
int main(int argc, char** argv) {
while(scanf("%d",&n)&&n!=0)
 {
  for(int i=1;i<=n;i++)
   scanf("%d",&a[i]);
  
  int l=1,r=0;
  for(int i=1;i<=n;i++)
  {
   while(l<=r&&a[st[r]]>a[i])
   {
    R[st[r]]=i-1;
    r--;
   }
   st[++r]=i;
  }
  while(l<=r)
  {
   R[st[l]]=st[r];
   l++;
  }
  for(int i=n;i>=1;i--)
  {
   while(l<=r&&a[st[r]]>a[i])
   {
    L[st[r]]=i+1;
    r--;
   }
   st[++r]=i;
  }
  while(l<=r)
  {
   L[st[l]]=st[r];
   l++;
  }
  long long ans=0;
  for(int i=1;i<=n;i++)
  {
   long long temp=(R[i]-L[i]+1)*(long long)a[i];
   ans=max(ans,temp);
  }
  
  printf("%lld\n",ans);
 }
 return 0;
}
게시 24 개 원래 기사 · 원 찬양 8 · 조회 529

추천

출처blog.csdn.net/weixin_44034698/article/details/104982495