rt。
#include <algorithm>
#define MAXN 4000001
int a[MAXN], a1[MAXN], st[MAXN], top = 0;
int solve(int N) {
for (int i = 1; i <= N; ++i) a1[i] = a[i] + i;
int ans = -1;
for (int i = 1; i <= N; ++i) {
int minval = a1[i - 1], crt = i - 1;
while (top && a[st[top]] < a[i]) {
while (crt > st[top])
minval = std::min(a1[--crt], minval);
ans = std::max(ans, a[st[top]] - minval + st[top] - 1);
--top;
}
st[++top] = i;
}
int minval = a1[N], crt = N;
while (top) {
while (crt > st[top])
minval = std::min(a1[--crt], minval);
ans = std::max(ans, a[st[top]] - minval + st[top] - 1);
--top;
}
return ans;
}
int main() {
int N = read<int>();
for (int i = 1; i <= N; ++i) a[i] = read<int>();
int ans1 = solve(N);
std::reverse(a + 1, a + N + 1);
int ans2 = solve(N);
return print<int>(std::max(ans1, ans2)), 0;
}
这个很明显可以卡掉,比如说
2000000,1999999,…,1,1,2,…,2000000 啊 /fad