

14/05/2026
15/05/2026
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll INF = (ll)1e18;
int N;
ll K;
vector<ll> A;
bool check(ll X) {
vector<ll> da(N + 5), db(N + 5), dc(N + 5);
ll a = 0, b = 0, c = 0;
ll used = 0;
int R = sqrt((long double)(X - 1));
for (int i = 1; i <= N; i++) {
a += da[i];
b += db[i];
c += dc[i];
ll dmg = a * 1LL * i * i + b * i + c;
if (dmg < A[i]) {
ll need = A[i] - dmg;
ll t = (need + X - 1) / X;
used += t;
if (used > K) return false;
int l = i;
int r = min(N, i + R);
ll Acoef = -t;
ll Bcoef = 2LL * i * t;
ll Ccoef = t * (X - 1LL * i * i);
da[l] += Acoef;
da[r + 1] -= Acoef;
db[l] += Bcoef;
db[r + 1] -= Bcoef;
dc[l] += Ccoef;
dc[r + 1] -= Ccoef;
// cập nhật ngay vị trí i
a += Acoef;
b += Bcoef;
c += Ccoef;
}
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N >> K;
A.assign(N + 1, 0);
for (int i = 1; i <= N; i++)
cin >> A[i];
ll lo = 1, hi = 1e9;
while (lo < hi) {
ll mid = (lo + hi) / 2;
if (check(mid))
hi = mid;
else
lo = mid + 1;
}
cout << lo << '\n';
}
Nếu bạn muốn hỏi bài tập
Các câu hỏi của bạn luôn được giải đáp dưới 10 phút
CÂU HỎI LIÊN QUAN
17/05/2026
Top thành viên trả lời