#include <algorithm>
#include <cstdio>
#define REP(a, n) for (int a = 0; a<(n); ++a)
#define FOR(a, b, c) for (int a = (b); a<=(c); ++a)
typedef long long LL;
using namespace std;
//////////////
bool ok_tu(LL cel, LL W, LL T, LL D) {
W = min(W, 200'000LL);
T = min(T, 200LL);
D = min(D, 200'000LL);
LL ile = T*(T-1)*(T-2)/6+W*T*D+W*T*(T-1)/2+T*(T-1)/2*D;
return ile>=cel;
}
int N;
int tab[200000];
bool ok(LL Z) {
LL W = 0;
REP(a, N) {
LL L = -1, R = Z+1;
while (R-L>1) {
LL M = (L+R)/2;
(ok_tu(tab[a], W, M, Z-M) ? R : L) = M;
}
if (R>Z)
return 0;
W += R;
Z -= R;
}
return 1;
}
void licz() {
scanf("%d", &N);
REP(a, N)
scanf("%d", &tab[a]);
LL L = 0, R = 200'000*200;
while (R-L>1) {
LL M = (L+R)/2;
(ok(M) ? R : L) = M;
}
printf("%lld\n", R);
}
int main() {
int T;
scanf("%d", &T);
REP(tt, T)
licz();
}
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 | #include <algorithm> #include <cstdio> #define REP(a, n) for (int a = 0; a<(n); ++a) #define FOR(a, b, c) for (int a = (b); a<=(c); ++a) typedef long long LL; using namespace std; ////////////// bool ok_tu(LL cel, LL W, LL T, LL D) { W = min(W, 200'000LL); T = min(T, 200LL); D = min(D, 200'000LL); LL ile = T*(T-1)*(T-2)/6+W*T*D+W*T*(T-1)/2+T*(T-1)/2*D; return ile>=cel; } int N; int tab[200000]; bool ok(LL Z) { LL W = 0; REP(a, N) { LL L = -1, R = Z+1; while (R-L>1) { LL M = (L+R)/2; (ok_tu(tab[a], W, M, Z-M) ? R : L) = M; } if (R>Z) return 0; W += R; Z -= R; } return 1; } void licz() { scanf("%d", &N); REP(a, N) scanf("%d", &tab[a]); LL L = 0, R = 200'000*200; while (R-L>1) { LL M = (L+R)/2; (ok(M) ? R : L) = M; } printf("%lld\n", R); } int main() { int T; scanf("%d", &T); REP(tt, T) licz(); } |
English