// clang-format off
#include<bits/stdc++.h>
using namespace std;
using LL=long long;
#define FOR(i,l,r) for(auto i=(l);i<=(r);++i)
#define REP(i,n) FOR(i,0,(n)-1)
#define ssize(x) int(x.size())
template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<"("<<p.first<<", "<<p.second<<")";}
template<class T>auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<"}";}
#ifdef DEBUG
#define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<"\n";}(X)
#else
#define debug(...) {}
#endif
// clang-format on
const int max_per_building = 185;
int ntests, N;
vector<int> seq;
// Is it possible with at most M guys?
bool
check(int M)
{
int sofar_atleast = 0;
auto func = [&M, &sofar_atleast](LL b) -> LL
{
LL res = b * sofar_atleast * (M - b - sofar_atleast);
if (b >= 2)
res += (b * (b - 1) * (b - 2)) / 6 + ((b * (b - 1)) / 2) * (M - b);
return res;
};
REP (i, N) {
LL b = 0;
while (b + sofar_atleast <= M && func(b) < seq[i]) ++b;
sofar_atleast += b;
if (sofar_atleast > M) return false;
}
debug(M, true);
return true;
}
int
solve()
{
cin >> N;
seq.resize(N);
for (auto& x : seq) cin >> x;
int l = 3, r = max_per_building * N;
while (l < r) {
int mid = (l + r) >> 1;
if (check(mid))
r = mid;
else
l = mid + 1;
}
return l;
}
int
main()
{
cin.tie(0)->sync_with_stdio(0);
cin >> ntests;
while (ntests--) cout << solve() << "\n";
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 | // clang-format off #include<bits/stdc++.h> using namespace std; using LL=long long; #define FOR(i,l,r) for(auto i=(l);i<=(r);++i) #define REP(i,n) FOR(i,0,(n)-1) #define ssize(x) int(x.size()) template<class A,class B>auto&operator<<(ostream&o,pair<A,B>p){return o<<"("<<p.first<<", "<<p.second<<")";} template<class T>auto operator<<(ostream&o,T x)->decltype(x.end(),o){o<<"{";int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<"}";} #ifdef DEBUG #define debug(X...)cerr<<"["#X"]: ",[](auto...$){((cerr<<$<<"; "),...)<<"\n";}(X) #else #define debug(...) {} #endif // clang-format on const int max_per_building = 185; int ntests, N; vector<int> seq; // Is it possible with at most M guys? bool check(int M) { int sofar_atleast = 0; auto func = [&M, &sofar_atleast](LL b) -> LL { LL res = b * sofar_atleast * (M - b - sofar_atleast); if (b >= 2) res += (b * (b - 1) * (b - 2)) / 6 + ((b * (b - 1)) / 2) * (M - b); return res; }; REP (i, N) { LL b = 0; while (b + sofar_atleast <= M && func(b) < seq[i]) ++b; sofar_atleast += b; if (sofar_atleast > M) return false; } debug(M, true); return true; } int solve() { cin >> N; seq.resize(N); for (auto& x : seq) cin >> x; int l = 3, r = max_per_building * N; while (l < r) { int mid = (l + r) >> 1; if (check(mid)) r = mid; else l = mid + 1; } return l; } int main() { cin.tie(0)->sync_with_stdio(0); cin >> ntests; while (ntests--) cout << solve() << "\n"; return 0; } |
English