#pragma GCC optimize("Ofast")
#include <cstdio>
#define int long long
#define LLD "%lld"
int req[200000], *reqp;
int n;
int ign;
bool slowcheck(int pc) {
int ch = 0, chv = 0;
for (int i = 0; i < pc; i++) {
if (ch < 1000) chv += i*(pc-1-i+ign);
else chv += (i+ign)*(pc-1-i);
if (chv >= req[ch]) {
chv = 0;
ch++;
}
if (ch >= n - ign) return true;
}
return false;
}
void solve() {
scanf(LLD, &n);
reqp = req;
int fore = n;
for (int i=0;i<fore;i++) {
int v;
scanf(LLD, &v);
if (v == 0) {
n--;
}
else {
*(reqp++) = v;
}
}
if (n > 2000) {
for (int i = 1000; i < 2000; i++) req[i] = req[n-2000+i];
ign = n - 2000;
}
else {
ign = 0;
}
int pc = n-ign;
while (!slowcheck(pc)) {
pc++;
}
printf(LLD "\n", pc+ign);
}
signed main() {
int q;
scanf(LLD, &q);
for (;q>0;q--) 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 | #pragma GCC optimize("Ofast") #include <cstdio> #define int long long #define LLD "%lld" int req[200000], *reqp; int n; int ign; bool slowcheck(int pc) { int ch = 0, chv = 0; for (int i = 0; i < pc; i++) { if (ch < 1000) chv += i*(pc-1-i+ign); else chv += (i+ign)*(pc-1-i); if (chv >= req[ch]) { chv = 0; ch++; } if (ch >= n - ign) return true; } return false; } void solve() { scanf(LLD, &n); reqp = req; int fore = n; for (int i=0;i<fore;i++) { int v; scanf(LLD, &v); if (v == 0) { n--; } else { *(reqp++) = v; } } if (n > 2000) { for (int i = 1000; i < 2000; i++) req[i] = req[n-2000+i]; ign = n - 2000; } else { ign = 0; } int pc = n-ign; while (!slowcheck(pc)) { pc++; } printf(LLD "\n", pc+ign); } signed main() { int q; scanf(LLD, &q); for (;q>0;q--) solve(); } |
English