voidcreate_seg(){ int st = 0, ed = 0; seg.clear(); for (int i = 1; i < n; i++) { if (a[i] > a[i-1]) ed = i; else { seg.pb(mp(st,ed)); st = ed = i; } } seg.pb(mp(st,ed)); /* for (int i = 0; i < seg.size(); i++) { int st = seg[i].first, ed = seg[i].second; printf("[%d, %d] -- [%d, %d]\n", st, ed, a[st], a[ed]); } */ }
inlineintgetLen(int id){ int st = seg[id].first, ed = seg[id].second; return ed-st+1; }
intsolve(){ int ans = 0; int size = seg.size(); for (int ith = 0; ith < size; ith++) { int ith_len = getLen(ith); ans = max(ans, ith_len); if (ith+1 == size) continue; int next = ith + 1; int next_len = getLen(next); if (ith_len == 1 || next_len == 1) ans = max(ans, ith_len + next_len); else { int v1 = a[seg[ith].second-1]; int v2 = a[seg[ith].second]; int v3 = a[seg[next].first]; int v4 = a[seg[next].first+1]; if (v2+1 < v4 || v1 < v3-1) ans = max(ans, ith_len+next_len); } ans = max(ans, ith_len+1); ans = max(ans, next_len+1); } return ans; }
intmain(){ while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) scanf("%d", &a[i]); create_seg(); printf("%d\n", solve()); } return0; }