#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
const ll K = 200;
const int N = 2e5+10;
ll a[N], n;
ll xc3(ll x) {
if (x < 3) return 0;
return (x*(x-1)*(x-2))/6;
}
ll xc2(ll x) {
if (x < 2) return 0;
return x*(x-1)/2;
}
bool check(ll s) {
ll tmp = 0;
for (int i=1; i<=n; ++i) {
bool chg = false;
for (ll b=0; b<=K; ++b) {
ll c = xc3(b) + (s - b) * xc2(b) + b * tmp * (s - tmp - b);
if (c >= a[i]) {
tmp += b;
chg = true;
break;
}
}
if (!chg) return false;
}
return tmp <= s;
}
void solve() {
cin>>n;
for (int i=1; i<=n; ++i) cin>>a[i];
ll l=0, r = n*K+100, ans=r;
while (l <= r) {
ll m=(l+r)/2;
if (check(m)) ans=m, r=m-1;
else l=m+1;
}
cout<<ans<<"\n";
}
int main() {
ios_base::sync_with_stdio(NULL);
cin.tie(NULL);
cout.tie(NULL);
int t=1; cin>>t;
while (t--) solve();
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pii; const ll K = 200; const int N = 2e5+10; ll a[N], n; ll xc3(ll x) { if (x < 3) return 0; return (x*(x-1)*(x-2))/6; } ll xc2(ll x) { if (x < 2) return 0; return x*(x-1)/2; } bool check(ll s) { ll tmp = 0; for (int i=1; i<=n; ++i) { bool chg = false; for (ll b=0; b<=K; ++b) { ll c = xc3(b) + (s - b) * xc2(b) + b * tmp * (s - tmp - b); if (c >= a[i]) { tmp += b; chg = true; break; } } if (!chg) return false; } return tmp <= s; } void solve() { cin>>n; for (int i=1; i<=n; ++i) cin>>a[i]; ll l=0, r = n*K+100, ans=r; while (l <= r) { ll m=(l+r)/2; if (check(m)) ans=m, r=m-1; else l=m+1; } cout<<ans<<"\n"; } int main() { ios_base::sync_with_stdio(NULL); cin.tie(NULL); cout.tie(NULL); int t=1; cin>>t; while (t--) solve(); } |
English