package 模拟三;
import java.util.Scanner;
/**
* 题目描述:牛牛定义排序子序列为一个数组中一段连续的子序列,并且这段子序列是非递增或者非递减排序的。
* 牛牛有一个长度为n的整数数组A,他现在有一个任务是把数组A分为若干段排序子序列,牛牛想知道他最少可以把这个数组分为几段排序子序列.
* 如样例所示,牛牛可以把数组A划分为[1,2,3]和[2,2,1]两个排序子序列,至少需要划分为2个排序子序列,所以输出2
*
* 输入描述:输入的第一行为一个正整数n(1 ≤ n ≤ 10^5)
* 第二行包括n个整数A_i(1 ≤ A_i ≤ 10^9),表示数组A的每个数字。
* 输出描述: 输出一个整数表示牛牛可以将A最少划分为多少段排序子序列
*
* 输入例子: 6 1 2 3 2 2 1
* 输出例子: 2
* @author 崔洪振367
* @version 创建时间:2017年5月23日 下午6:28:40
* 解题思路:题目大意:就是将一个给定的序列分成若干个子序列,这些子序列或增或减。
*
* 1)设置一个标志,当增序列或减序列发生时,标志发生变化。
* 2)设置的标志flag为1时,发生增序列的变化,为-1时发生减序列的变化。为0时序列状态(增或减)保持不变。
*/
public class Q2017_5排序子序列 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
sc.nextLine();
int[] nums = new int
;
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
// 用一个标志来区分
int flag = 0;
int count = 1;// 统计能够划分的数组的个数
for (int i = 1; i < n; i++) {
if (nums[i] > nums[i - 1]) {// 递增情况:flag==1表示递增,不做任何动作
if (flag == 0) {
flag = 1;
}
if (flag == -1) {// 由递减变递增,count加1
flag = 0;
count++;
}
} else if (nums[i] < nums[i - 1]) {// 递减情况:flag==-1,表示递减,不做任何动作
if (flag == 0) {
flag = -1;
}
if (flag == 1) {// 此时有递增变递减,需要count加1
flag = 0;
count++;
}
}
}
System.out.println(count);
}
sc.close();
}
}