rt,代码如下。
#include <iostream>
#define int long long
using namespace std;
const int N = 5e4 + 10;
int n, d, h[N] = {0};
bool cxk(int x) {
int cnt = 1, hp = 0;
for (int i = 1; i <= d; ++ i) {
hp >>= 1;
while (hp < x) {
if (cnt > n)
return false;
hp += h[cnt ++];
}
}
return true;
}
int ch[N];
void wrt(int x) {
int cnt = 1, hp = 0;
for (int i = 1; i <= d; ++ i) {
hp >>= 1;
while (hp < x)
hp += h[cnt], ch[cnt ++] = i;
}
for (int i = 1; i <= n; ++ i)
cout << ch[i] << "\n";
}
signed main() {
cin >> n >> d;
int l = 1, r = 1;
for (int i = 1; i <= n; ++ i)
cin >> h[i], r += h[i];
while (r - l > 1) {
int mid = r + l >> 1;
if (cxk(mid))
l = mid;
else
r = mid;
}
cout << l << "\n";
wrt(l);
return 0;
}