http://judge.u-aizu.ac.jp/onlinejudge/cdescription.jsp?cid=ACPC2017Day2&pid=E
解法
http://judge.u-aizu.ac.jp/onlinejudge/creview.jsp?rid=2538292&cid=ACPC2017Day2
連続する増加列、減少列の最長を答えれば良い(隣り合う同じ値の数は1つとして考える)
これを先頭から数えれば答え。
int N, A[101010]; //-------------------------------------------------------------------------------------------------- void _main() { cin >> N; rep(i, 0, N) cin >> A[i]; int st = 0; // =1:増加中, =2:減少中 int cn = 1; int ans = 1; rep(i, 1, N) { if (A[i - 1] < A[i]) { if (st == 1) { cn++; } else { ans = max(ans, cn); st = 1; cn = 2; } } if (A[i - 1] > A[i]) { if (st == 2) { cn++; } else { ans = max(ans, cn); st = 2; cn = 2; } } } ans = max(ans, cn); cout << ans << endl; }