#include <bits/stdc++.h> using namespace std; #define int long long vector<int> input; int n; int binom_3(int n){ return ((n) * (n-1) * (n-2)) / 6ll; } int binom_2(int n){ return ((n) * (n-1)) / 2ll; } bool check_possible(int amm){ int l = 0, r = amm, cnt = 0; for(int i = 0; i<n; i++){ if(input[i] == 0) continue; while(true){ cnt++; r--; if(r < 0) return false; if(l*r >= input[i]) break; int tmp = l * r * cnt + binom_2(cnt) * (amm-cnt) + binom_3(cnt); if(tmp >= input[i]) break;; } l = amm-r; cnt = 0; } return true; } void solve(){ cin>>n; input.assign(n, 0); for(int i = 0; i<n; i++){ cin>>input[i]; } int mn = 0, mx = 1000000000ll, mid; while(mn < mx){ mid = (mn + mx) / 2ll; if(check_possible(mid)) mx = mid; else mn = mid + 1; } cout<<mn<<endl; } signed main(){ cin.tie(0)->sync_with_stdio(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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <bits/stdc++.h> using namespace std; #define int long long vector<int> input; int n; int binom_3(int n){ return ((n) * (n-1) * (n-2)) / 6ll; } int binom_2(int n){ return ((n) * (n-1)) / 2ll; } bool check_possible(int amm){ int l = 0, r = amm, cnt = 0; for(int i = 0; i<n; i++){ if(input[i] == 0) continue; while(true){ cnt++; r--; if(r < 0) return false; if(l*r >= input[i]) break; int tmp = l * r * cnt + binom_2(cnt) * (amm-cnt) + binom_3(cnt); if(tmp >= input[i]) break;; } l = amm-r; cnt = 0; } return true; } void solve(){ cin>>n; input.assign(n, 0); for(int i = 0; i<n; i++){ cin>>input[i]; } int mn = 0, mx = 1000000000ll, mid; while(mn < mx){ mid = (mn + mx) / 2ll; if(check_possible(mid)) mx = mid; else mn = mid + 1; } cout<<mn<<endl; } signed main(){ cin.tie(0)->sync_with_stdio(0); int t; cin>>t; while(t--) solve(); return 0; } |