思路在代码里.
#include <bits/stdc++.h>
using namespace std;
#define srand srand(time(NULL))
#define random(x) rand() % (x)
#define il inline
#define ptc putchar
#define pb push_back
#define reg register
#define mp make_pair
#define R(i, l, r) for (int i = l; i <= r; ++i)
#define debug puts("--------------------------------------------")
typedef __int128 LL;
typedef long long ll;
typedef pair<int, int> PII;
namespace HOOOOOCH {
template <typename T>
il void read(T &x) {
x = 0; T f = 1; char ch;
while (!isdigit(ch = getchar())) f -= (ch == '-') << 1;
while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch & 15), ch = getchar(); x *= f;
}
template <typename T, typename ...L>
il void read(T &x, L &...y) {read(x); read(y...);}
template <typename T>
il void write(T x) {
if (x < 0) ptc('-'), x = -x;
if (x > 9) write(x / 10);
ptc(x % 10 + '0');
}
template <typename T, typename ...L>
il void write(T &x, L &...y) {write(x), ptc(' '); write(y...);}
}
using namespace HOOOOOCH;
#define int ll
int n, a[(int)4e7 + 5], ans = INT_MIN;
signed main() {
/*
当l比l2更优时
1.l为最小值
a[r] - a[l] - (r - l + 1) > a[r] - a[l2] - (r - l2 + 1)
a[r] - a[l] - r + l - 1 > a[r] - a[l2] - r + l2 - 1
- a[l] + l > - a[l2] + l2
l - a[l] > l2 - a[l2]
2.1.l为最大值
a[l] - a[r] - (r - l + 1) > a[l2] - a[r] - (r - l2 + 1)
a[l] - a[r] - r + l - 1 > a[l2] - a[r] - r + l2 - 1
a[l] + l > a[l2] + l2
*/
read(n);
R(i, 1, n) read(a[i]);
int tmp = INT_MIN, pos;
for (int i = 2; i <= n; ++i) { // 右端点最大
if ((i - 1) - a[i - 1] > tmp) tmp = (i - 1) - a[i - 1], pos = i - 1;
ans = max(ans, a[i] - a[pos] - (i - pos + 1));
}
tmp = INT_MIN, pos = -1;
for (int i = 2; i <= n; ++i) { // 右端点最小
if (a[i - 1] + (i - 1) > tmp) tmp = a[i - 1] + (i - 1), pos = i - 1;
ans = max(ans, a[pos] - a[i] - (i - pos + 1));
}
write(ans);
return 0;
}