问题 F: 山的宽度 一个把人绕晕的题。。。。。
题目描述
一座山定义为一段连续的高度序列,序列中的高度一开始单调上升(或者不变),然后单调下降 (或者不变)。举例来说,2, 3, 3, 4 ,5 , 5 ,4, 4,3,2,这一段高度序列就是一座山。若有一段只单调上升或者只单调下降的序列,也算是一座山。
山的宽度定义为个座山高度序列的长度。例如:2, 3, 3, 4 ,5 , 5 ,4,4, 4, 3,2,这一座山的宽度为11;
如下图:
山的宽度定义为个座山高度序列的长度。例如:2, 3, 3, 4 ,5 , 5 ,4,4, 4, 3,2,这一座山的宽度为11;
如下图:

输入
输入数据有两行。
第一行有一个整数,表示有1<=N<=3000个高度。
第二行有N个整数构成的序列,第i个整数表示第i个高度Hi(0<Hi<=10000)。
第一行有一个整数,表示有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;
}

浙公网安备 33010602011771号