はまやんはまやんはまやん

hamayanhamayan's blog

Piano [ACPC2017 Day2 E]

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;
}