花匠栋栋种了一排花,每株花都有自己的高度。花儿越长越大,也越来越挤。栋栋决定把这排中的一部分花移走,将剩下的留在原地,使得剩下的花能有空间长大,同时,栋栋希望剩下的花排列得比较别致。具体而言,栋栋的花的高度可以看成一列整数h1,h2, … ,hn。设当一部分花被移走后,剩下的花的高度依次为g1,g2, … ,gm,则栋栋希望下面两个条件中至少有一个满足:
      

注意上面两个条件在m=1时同时满足,当m>1时最多有一个能满足。请问,栋栋最多能将多少株花留在原地。

 

输入:

第二行包含n个整数,依次为h1,h2, … ,hn,表示每株花的高度。

 

输出:

输出一行,包含一个整数m,表示最多能留在原地的花的株数。

 

输入示例:

5
5 3 2 1 2

 

输出示例:

3

 

数据范围:1≤n≤100,000,0≤hi≤1,000,000,所有的hi随机生成,所有随机数服从某区间内的均匀分布。

 

 1 #include<iostream>
 2 using namespace std;
 3 int a,temp=2,ans,n;
 4 int main()
 5 {
 6     cin>>a;//输入花的数量 
 7     int con;
 8     cin>>con;//预先输入第一个花,以便判断(因为第一个花不能参与判断) 
 9     for(int i=1;i<a;i++)
10     {
11         cin>>n;//输入花的高度 
12         //我们用temp记录刚刚输入的花高度是否满足条件A或条件B 
13         //一开始temp值为2,表示既不满足A,也不满足B 
14         if(n>con&&temp!=1) {ans++;temp=1;}//我们用temp=1表示该花满足条件A 
15         if(n<con&&temp!=0) {ans++;temp=0;}//我们用temp=0表示该花满足条件B 
16         con=n;//这个con储存的是上一个花的高度,所以需要更新 
17     }
18     cout<<ans+1;//我也不知道这里为什么要+1,但是不加1答案少1,加上1提交就对了 
19     //system("pause>nul");
20     return 0;
21 }
C++ answer