#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; } |
English