#include <bits/stdc++.h>
using namespace std;
#define rep(a, b) for (int a = 0; a < (b); a++)
#define rep1(a, b) for (int a = 1; a <= (b); a++)
#define all(x) (x).begin(), (x).end()
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
const int MOD = 1e9 + 7;
#define LOCAL false
#define int ll
const int LIM = 2e5 + 7;
int n;
int vals[LIM];
const int MIL = 1000007;
int calc(int a, int l, int r) {
if (a > 1000) return MIL;
if (a*l > MIL) return MIL;
if (a*r > MIL) return MIL;
return a*(a-1)*(a-2)/6 + a*(a-1)/2*l + a*(a-1)/2*r + a*l*r;
}
bool ok(int cnt) {
int rem = cnt;
rep(i, n) if (vals[i] != 0) {
if (rem <= 1) return false;
if (calc(rem, cnt-rem, 0) < vals[i]) return false;
int l = 1;
int r = rem;
while (l<r) {
int mid = (l+r)/2;
if (calc(mid, cnt-rem, rem-mid) >= vals[i]) r = mid;
else l = mid+1;
}
rem -= l;
}
return true;
}
void solve() {
cin >> n;
rep(i, n) cin >> vals[i];
int l = 3;
int r = 2e8;
while (l<r) {
int mid = (l+r)/2;
if (ok(mid)) r = mid;
else l = mid+1;
}
cout << l << "\n";
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0);
if (LOCAL) {
ignore=freopen("io/in", "r", stdin);
ignore=freopen("io/out", "w", stdout);
}
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 67 68 69 70 71 | #include <bits/stdc++.h> using namespace std; #define rep(a, b) for (int a = 0; a < (b); a++) #define rep1(a, b) for (int a = 1; a <= (b); a++) #define all(x) (x).begin(), (x).end() using ll = long long; using pii = pair<int, int>; using pll = pair<ll, ll>; const int MOD = 1e9 + 7; #define LOCAL false #define int ll const int LIM = 2e5 + 7; int n; int vals[LIM]; const int MIL = 1000007; int calc(int a, int l, int r) { if (a > 1000) return MIL; if (a*l > MIL) return MIL; if (a*r > MIL) return MIL; return a*(a-1)*(a-2)/6 + a*(a-1)/2*l + a*(a-1)/2*r + a*l*r; } bool ok(int cnt) { int rem = cnt; rep(i, n) if (vals[i] != 0) { if (rem <= 1) return false; if (calc(rem, cnt-rem, 0) < vals[i]) return false; int l = 1; int r = rem; while (l<r) { int mid = (l+r)/2; if (calc(mid, cnt-rem, rem-mid) >= vals[i]) r = mid; else l = mid+1; } rem -= l; } return true; } void solve() { cin >> n; rep(i, n) cin >> vals[i]; int l = 3; int r = 2e8; while (l<r) { int mid = (l+r)/2; if (ok(mid)) r = mid; else l = mid+1; } cout << l << "\n"; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); if (LOCAL) { ignore=freopen("io/in", "r", stdin); ignore=freopen("io/out", "w", stdout); } int t; cin >> t; while (t--) solve(); return 0; } |
English