AGC013: A - Sorted Arrays

問題

A - Sorted Arrays

解説

上または下に凸になっている部分が数列の切れ目になる。 この形状を簡単に捉えるために、まずは連続する数字はまとめる。

あとはO(N)で形状の数を数え上げれば良い。

int main() {
  int N; cin >> N;
  vector<int> A(N);
  rep(i, N) cin >> A[i];  
  A.erase(unique(A.begin(), A.end()), A.end());
  int ans = 1;
  REP(i, 2, A.size()) {
    if ((A[i - 2] < A[i - 1] && A[i - 1] > A[i]) ||
        (A[i - 2] > A[i - 1] && A[i - 1] < A[i])) {
      ans++;
      i++;
    }
  }
  cout << ans << endl;
}