二分+前缀和 $O(nlogn)$
$小青蛙的往返跳x次,可以等价为从起点跳到终点,跳2x次\\ 而需要跳2x次的话,假设有2x只小青蛙一起跳,那么一开始他们能调的范围就是[1, y],\\ 因此这个区间高度之和需要 \geq 2x\\ 而下一次跳的区间就不固定了,但是如果假设2x只小青蛙同步一起跳到同一个区间\\ 那么这个区间就需要高度之和大于 \geq 2x\\ 利用二分获得一个条件,小青蛙的跳跃能力,\\ 然后判断每个区间是否满足上述要求:\\ 每个长度为y的区间他的高度之和 \geq 2x$
#include <cstdio>
#include <algorithm>
#include <cstring>
#define int long long
using namespace std;
const int N = 100010;
int h[N], s[N];
int n, x;
bool check(int mid){
for (int l = 1; l + mid - 1 < n; l ++){
int r = l + mid - 1;
if (s[r] - s[l - 1] < 2 * x) return false;
}
return true;
}
signed main(){
scanf("%lld%lld", &n, &x);
for (int i = 1; i < n; i ++) {
scanf("%lld", &h[i]);
s[i] = s[i - 1] + h[i];
}
int l = 1, r = n;
while (l < r){
int mid = l + r >> 1;
if (check(mid)) r = mid;
else l = mid + 1;
}
printf("%lld\n", r);
return 0;
}