#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(); } |