1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include<bits/stdc++.h>
using namespace std;

constexpr int MAXN = 5e4 + 7;

int dp[MAXN][2][2]; // ind change increase

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n, last, curr;
    cin >> n >> curr;

    dp[1][1][0] = 1;
    dp[1][1][1] = 1;

    for (int i = 2; i <= n; i++)
    {
        last = curr;
        cin >> curr;

        dp[i][1][0] = min(dp[i - 1][1][1], dp[i-1][0][1]) + 1;
        dp[i][1][1] = min(dp[i - 1][1][0], dp[i-1][0][0]) + 1;

        dp[i][0][0] = dp[i - 1][1][1];
        dp[i][0][1] = dp[i - 1][1][0];

        if (curr < last)
            dp[i][0][0] = min(dp[i][0][0], dp[i - 1][0][1]);

        if (last < curr)
            dp[i][0][1] = min(dp[i][0][1], dp[i - 1][0][0]);
    }

    cout << min(min(dp[n][0][0], dp[n][0][1]), min(dp[n][1][0], dp[n][1][1])) << "\n";
    return 0;
}