1. 程式人生 > 實用技巧 >問題 F: 山的寬度 一個把人繞暈的題。。。。。

問題 F: 山的寬度 一個把人繞暈的題。。。。。

問題 F: 山的寬度

時間限制: 1 Sec記憶體限制: 128 MB
提交 狀態

題目描述

一座山定義為一段連續的高度序列,序列中的高度一開始單調上升(或者不變),然後單調下降 (或者不變)。舉例來說,2, 3, 3, 4 ,5 , 5 ,4, 4,3,2,這一段高度序列就是一座山。若有一段只單調上升或者只單調下降的序列,也算是一座山。
山的寬度定義為個座山高度序列的長度。例如:2, 3, 3, 4 ,5 , 5 ,4,4, 4, 3,2,這一座山的寬度為11;
如下圖:

輸入

輸入資料有兩行。
第一行有一個整數,表示有1<=N<=3000個高度。
第二行有N個整數構成的序列,第i個整數表示第i個高度Hi(0<Hi<=10000)。

輸出

輸出最寬的山的寬度。

樣例輸入 Copy

15
2 3 3 4 5 5 4 4 4 3 2 3 3 3 5

樣例輸出 Copy

11




解析:把每一個點都看成山峰往左掃如果當前值比前面的大的話a--;往右掃如果當前值比後一個大的話b++;
所以b-a+1,為山的寬度

#include<stdio.h>
int main()
{
int s[3005],a,b,n,i,max=0,c;
scanf("%d",&n);
for(i=0;i<=n-1;i++)
scanf("%d",&s[i]);
for(i=0;i<=n-1;i++)
{ a=b=i;
while(s[a-1]<=s[a]&&a>=1)
a--;

while(s[b+1]<=s[b]&&b<n-1)
b++;
c=b-a+1;


if(c>=max) max=c;
}
printf("%d",max);
return 0;

}