1 2 3 3 2 1中的 1 2 3 子序列是递增也是非递减,满足。

3 2 1 是递减的,也是非递增,同样满足。

也就是只要遍历非递减或者非递增,就能逐个排除。

注意while遍历时不要越界,把 i < v.size() 写在前面。

#include <iostream>
#include <vector>
using namespace std;

int main(){

    int n;
    cin >> n;
    vector<int> v;
    v.resize(n);
    int tmp = 0;
    while(n--){
        cin >> v[tmp++];
    }
    int ret = 0, i = 0;
    while(i < v.size()){
        if(v[i] < v[i+1]){
            while(i < v.size() && v[i] <= v[i+1]) // 遍历非递减
                ++i;
            ++i, ++ret;
        }
        else if(v[i] == v[i+1]) // 相等时不能判断
            ++i;
        else{
            while(i < v.size() && v[i] >= v[i+1]) // 遍历非递增
                ++i;
            ++i, ++ret;
        }
    }
    cout << ret << endl;
    return 0;
}