rt,我二分+模拟都能过
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int kMaxN = 1e4 + 3;
int n, t;
int d[kMaxN];
int sum[kMaxN];
bool check(int mid) {
int now = mid + 1;
int res = 0;
for (int j = 1; j <= mid; j++) {
sum[j] = d[j];
}
while (now <= n) {
int minn = 1e5;
for (int j = 1; j <= mid; j++) {
minn = min(minn, sum[j]);
}
res += minn;
for (int j = 1; j <= mid; j++) {
sum[j] -= minn;
if ((!sum[j])) sum[j] = d[now++];
}
}
sort (sum + 1, sum + 1 + mid);
int cnt = 0;
for (int i = 1; i <= mid; i++) {
cnt += (max(0ll, sum[i] - cnt));
}
res += cnt;
return res <= t;
}
signed main() {
// freopen("cowdance.in", "r", stdin);
// freopen("cowdance.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n >> t;
for (int i = 1; i <= n; i++) {
cin >> d[i];
}
int l = 0, r = n;
while (l + 1 < r) {
int mid = l + r >> 1;
if (check (mid)) {
r = mid;
} else {
l = mid;
}
}
cout << r << "\n";
return 0;
}