#include <bits/stdc++.h>
using namespace std;
const int MAXN = 3e5 + 7;
int h[MAXN], dp[MAXN];
stack<int> sta_de;
stack<int> sta_in;
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &h[i]);
    dp[i] = 0x3f3f3f3f;
  }
  dp[0] = -1;
  sta_de.push(1);
  sta_in.push(1);
  for (int i = 1; i <= n; i++) {
    dp[i] = min(dp[i - 1] + 1, dp[i]);
    int f1 = 0, f2 = 0;
    while (sta_in.size() && h[sta_in.top()] >= h[i]) {
      if (h[sta_in.top()] == h[i]) f1 = 1;
      dp[i] = min(dp[i], dp[sta_in.top()] + 1);
      sta_in.pop();
    }
    if (!f1 && sta_in.size()) dp[i] = min(dp[i], dp[sta_in.top()] + 1);
    while (sta_de.size() && h[sta_de.top()] <= h[i]) {
      if (h[sta_de.top()] == h[i]) f2 = 1;
      dp[i] = min(dp[i], dp[sta_de.top()] + 1);
      sta_de.pop();
    }
    if (!f2 && sta_de.size()) dp[i] = min(dp[i], dp[sta_de.top()] + 1);
    sta_in.push(i);
    sta_de.push(i);
  }
  printf("%d\n", dp[n]);
  return 0;
}
