问题 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;

}

 
posted @ 2020-11-04 16:15  瑜瑜子  阅读(319)  评论(0)    收藏  举报