zstu 2107 Largest Rectangle in a Histogram
4877 단어 dp
for(int i=2;i<=n;i++)
{
if(height[i-1]<height[i])
node[i].left=0;
else
{
int k=i-1;
while(height[k]>=height[i]&&k>1)
{
k--;
}
node[i].left=i-k;
}
}
그리고 dp가 저장한 것은 거리가 아니라 현재 점이 도달할 수 있는 가장 먼 위치(첫 번째로 도달할 수 없는 위치일 수도 있다)를 생각하면 된다.오랫동안 화를 내다.롱롱을 하려면 제목 안의 하이분에 얼굴을 때려야 한다.
int height[100010];
for(int i=1;i<=n;i++)
{
scanf("%d",&height[i]);
}
for(int i=1;i<=n;i++)
{
long long test=(fabs(node[i].right-node[i].left)+1)*height[i]; // abs 。。
ans=max(ans,test);
}
왜 내가 여기에fabs를...공교롭게도.오후 내내 고민했어요.원래 입력도 lld였어요.위 abs는 지났지만, 틀렸습니다.다음은 진짜
#include<stdio.h>
#include<math.h>
long long max(long long g,long long h)
{
return g>h?g:h;
}
struct nodes
{
int left;
int right;
}node[100010];
long long height[100010];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
for(int i=1;i<=n;i++)
{
scanf("%lld",&height[i]);
node[i].left=i;
node[i].right=i;
}
height[0]=-1;
height[n+1]=-1;
for(int i=1;i<=n;i++)
{
while(height[i]<=height[node[i].left-1])
{
node[i].left=node[node[i].left-1].left;
}
}
for(int i=n;i>=1;i--)
{
while(height[i]<=height[node[i].right+1])
{
node[i].right=node[node[i].right+1].right;
}
}
long long ans=0;
for(int i=1;i<=n;i++)
{
long long test=(node[i].right-node[i].left+1)*height[i];
ans=max(ans,test);
}
printf("%lld
",ans);
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【경쟁 프로 전형적인 90문】008의 해설(python)의 해설 기사입니다. 해설의 이미지를 봐도 모르는 (이해력이 부족한) 것이 많이 있었으므로, 나중에 다시 풀었을 때에 확인할 수 있도록 정리했습니다. ※순차적으로, 모든 문제의 해설 기사를 들어갈 예정입니다. 문자열...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.