#include <bits/stdc++.h>
#define ll long long
#define ve vector
#define fi first
#define se second
#define ld double
#define all(x) x.begin(), x.end()
#define int long long
using namespace std;
typedef pair<int, int> pii;
bool check(int sum, ve<int> v){
int suml = 0;
for(int i = 0; i < v.size(); i++){
int l = 0, r = sum - suml, ans = -1;
while(l <= r){
int mid = (l + r) >> 1;
int sumr = sum - mid - suml;
ll cnt = (ll)mid*(mid-1)*(mid-2)/6;
cnt += (ll)mid*(mid-1)/2*(suml + sumr);
cnt += mid*suml*sumr;
if(cnt >= v[i]){
ans = mid;
r = mid - 1;
}
else l = mid + 1;
}
if(ans == -1)
return 0;
suml += ans;
}
return 1;
}
void solve(){
int n;
cin >> n;
ve<int> v(n);
for(auto& i : v)
cin >> i;
int l = 0, r = 1e6;
while(l < r){
int mid = (l + r) >> 1;
if(check(mid, v))
r = mid;
else l = mid + 1;
}
cout << l << "\n";
}
signed main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
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 | #include <bits/stdc++.h> #define ll long long #define ve vector #define fi first #define se second #define ld double #define all(x) x.begin(), x.end() #define int long long using namespace std; typedef pair<int, int> pii; bool check(int sum, ve<int> v){ int suml = 0; for(int i = 0; i < v.size(); i++){ int l = 0, r = sum - suml, ans = -1; while(l <= r){ int mid = (l + r) >> 1; int sumr = sum - mid - suml; ll cnt = (ll)mid*(mid-1)*(mid-2)/6; cnt += (ll)mid*(mid-1)/2*(suml + sumr); cnt += mid*suml*sumr; if(cnt >= v[i]){ ans = mid; r = mid - 1; } else l = mid + 1; } if(ans == -1) return 0; suml += ans; } return 1; } void solve(){ int n; cin >> n; ve<int> v(n); for(auto& i : v) cin >> i; int l = 0, r = 1e6; while(l < r){ int mid = (l + r) >> 1; if(check(mid, v)) r = mid; else l = mid + 1; } cout << l << "\n"; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int T = 1; cin >> T; while (T--) solve(); } |
English