#include using namespace std; typedef long long ll; typedef vector vll; int n, logn=0; void min_jmp(vector &T, int i, ll v0) { T[i][0] = v0; for (int b = 0; b < logn; ++b) T[i][b+1] = min(T[i][b], T[max(i-(1< &T, int i, ll v) { for (int b = logn; b >= 0 && i >= 0; --b) if (T[i][b] >= v) i -= 1< surplus(n+1, vll(logn+1)), deficit(n+1, vll(logn+1)), opt_glide(n+1, vll(logn+1)); vll opt(n+1); for (int i = 1; i <= n; ++i) { opt[i] = max(a_sum[i]-1, 0LL); if (a[i-1] == 0) opt[i] = min(opt[i], opt[i-1]); int r = prev_smaller(surplus, i-1, a_sum[i]-i+1); if (r >= 0) { int l = prev_smaller(deficit, r-1, i-a_sum[i]), b = 0; while ((2<