#include<bits/stdc++.h> using namespace std; long long n, tab[200009]; bool check(long long k) { long long ak = 0, bk = k, a, b, c, sum; for(int i=1; i<=n; i++) { a = 0; b = min(bk + 1, 201LL); while(a < b) { c = (a + b) / 2; sum = c * (c - 1) * (c - 2) + 3LL * c * (c - 1) * (ak + bk - c) + 6LL * c * ak * (bk - c); if(sum >= 6LL * tab[i]) b = c; else a = c + 1; } bk -= a; ak += a; sum = a * (a - 1) * (a - 2) + 3LL * a * (a - 1) * (ak + bk) + 6LL * a * ak * bk; if(ak > k || sum < 6LL * tab[i]) return false; } return true; } void solve() { cin>>n; for(int i=1; i<=n; i++) cin>>tab[i]; long long a = 3, b = 200 * n, c; while(a < b) { c = (a + b) / 2; if(check(c)) b = c; else a = c + 1; } cout<<a<<'\n'; return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t; cin>>t; while(t--) solve(); return 0; }
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 | #include<bits/stdc++.h> using namespace std; long long n, tab[200009]; bool check(long long k) { long long ak = 0, bk = k, a, b, c, sum; for(int i=1; i<=n; i++) { a = 0; b = min(bk + 1, 201LL); while(a < b) { c = (a + b) / 2; sum = c * (c - 1) * (c - 2) + 3LL * c * (c - 1) * (ak + bk - c) + 6LL * c * ak * (bk - c); if(sum >= 6LL * tab[i]) b = c; else a = c + 1; } bk -= a; ak += a; sum = a * (a - 1) * (a - 2) + 3LL * a * (a - 1) * (ak + bk) + 6LL * a * ak * bk; if(ak > k || sum < 6LL * tab[i]) return false; } return true; } void solve() { cin>>n; for(int i=1; i<=n; i++) cin>>tab[i]; long long a = 3, b = 200 * n, c; while(a < b) { c = (a + b) / 2; if(check(c)) b = c; else a = c + 1; } cout<<a<<'\n'; return; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t; cin>>t; while(t--) solve(); return 0; } |