码迷,mamicode.com
首页 > 其他好文 > 详细

uscao smount

时间:2014-11-20 01:27:32      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:blog   http   io   ar   os   sp   for   数据   on   

【问题描述】

一天,Bessie 在眺望美丽的威斯康星的群山的时候,她产生了疑问:哪座山是最宽的? 她决定在地平线上,利用她的新大量程山峰高度测量仪依次做 N (1 <= N <= 10,000)次高度测量 H_i (1 <= H_i <= 1,000,000,000)。 一座山定义为一段连续的高度序列,序列中的高度一开始单调上升(或者不变),然后单调下降(或者不变)。举例来说,2, 3, 3, 5, 4, 4, 1 这一段高度序列就是一座山。如果在她的视线范围内有一段只单调上升或者只单调下降的序列,也算是一座山。注意,两座山之间可能有部分重叠。 山的宽度定义为在这个山上进行的测量的次数(也就是序列的长度)。例如序列 2, 3, 3,5, 4, 4, 1的宽度为 7.请帮 Bessie找到最宽的山。 这是一个比较典型的地平线的例子:

             *******                   *  
            *********                 ***  
            **********               *****  
            ***********           *********               *  
  *      *****************       ***********             *** *  
  **    *******************     *************   * *     *******      *  
  **********************************************************************  
  ?ddsssuussuussssssddddssddssssuuuuuuuuddddddssududssssuuudduddsssssuds  
  3211112333677777776543332111112344456765432111212111112343232111111211  
  aaaaa                     cccccccccccccccccccc eeeeeee    ggggggggg  
    bbbbbbbbbbbbbbbbbbbbbbbbbbbb             ddddd ffffffffff  hhhhhhhhh  

山标记为‘a‘, ‘b‘等等。显然,山 b有着最大的宽度,宽度为 28。

[编辑]【输入数据】

第 1 行: 一个单独的整数: N 第 2 到第N+1 行: 第i+1包含一个单独的整数: H_i

[编辑]【输出数据】

第 1 行: 一个单独的整数,表示最宽的山的宽度。

[编辑]【输入样例】

 
7  
3  
2  
3  
5  
4  
1  
6

[编辑]【输入细节】

测量到的高度分别为 3, 2, 3, 5, 4, 1, 6.

[编辑]【输出样例】

5

[编辑]【输出细节】

在最宽的山处测量到的高度为 2, 3, 5, 4, 1. 其他的山包括 3, 2 和 1, 6。

 

数一哥哥教我的,萌萌哒,思想很巧妙

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<queue>
#include<vector>
#include<set>
using namespace std;
int n,a[100010],ans,cnt;
int main()
{
      scanf("%d",&n);
      for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
      ans=1;
      for(int i=1;i<=n;i++)
      {
            cnt=0;
            int j=i+1;
            if(a[i]>a[i+1])
            {
                  cnt++;
                  while(j<=n&&a[j-1]>=a[j])
                        cnt++,j++;
            }
            else
            {
                  cnt++;
                  while(j<=n&&a[j-1]<=a[j])
                        cnt++,j++;
                  while(j<=n&&a[j-1]>=a[j])
                        cnt++,j++;
            }
            ans=max(ans,cnt);
      }
      printf("%d\n",ans);
      return 0;
}

  

uscao smount

标签:blog   http   io   ar   os   sp   for   数据   on   

原文地址:http://www.cnblogs.com/a972290869/p/4109564.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!