/* -*- coding: utf-8 -*- * * 1188.cc: No.1188 レベルX門松列 - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 100000; /* typedef */ /* global variables */ int as[MAX_N], q0[MAX_N], q1[MAX_N]; int dp0[MAX_N], dp1[MAX_N]; /* subroutines */ /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", as + i); int qt0 = 0, qt1 = 0; for (int i = 0; i < n; i++) { while (qt0 > 0 && as[q0[qt0 - 1]] <= as[i]) qt0--; while (qt1 > 0 && as[q1[qt1 - 1]] >= as[i]) qt1--; q0[qt0++] = q1[qt1++] = i; dp0[i] = qt0, dp1[i] = qt1; } qt0 = qt1 = 0; int maxl = 0; for (int i = 0; i < n; i++) { while (qt0 > 0 && as[q0[qt0 - 1]] <= as[i]) qt0--; while (qt1 > 0 && as[q1[qt1 - 1]] >= as[i]) qt1--; q0[qt0++] = q1[qt1++] = i; int l = max(min(dp0[i], qt0), min(dp1[i], qt1)) - 1; if (maxl < l) maxl = l; } printf("%d\n", maxl); return 0; }