#[allow(unused_imports)]
use std::cmp::{max};
use std::io::{BufWriter, stdin, stdout, Write};
#[derive(Default)]
struct Scanner { buffer: Vec<String> }
impl Scanner {
fn next<T: std::str::FromStr>(&mut self) -> T {
loop {
if let Some(tok) = self.buffer.pop() {
return tok.parse().ok().expect("Failed parse");
}
let mut s = String::new();
stdin().read_line(&mut s).expect("Failed read");
self.buffer = s.split_whitespace().rev().map(String::from).collect();
}
}
}
#[allow(unused_variables)]
macro_rules! io_init {
($scan:ident, $out:ident) => {
let mut $scan: Scanner = Scanner::default();
let $out = &mut BufWriter::new(stdout());
};
}
macro_rules! read {
($scan:ident, $($v:pat=>$t:ty),*) => { $(let $v=$scan.next::<$t>();)* };
}
fn solve(scan: &mut Scanner, out: &mut BufWriter<std::io::Stdout>) {
let n = scan.next::<usize>();
let mut a = Vec::with_capacity(n);
for _ in 0..n {
a.push(scan.next::<i32>());
}
let mut l = 1usize;
let mut r = n + 1;
while l + 1 < r {
let mid = (l + r) >> 1;
let mut ok = 0i32;
let mut f = true;
let mut tag = vec![0i32; 2 * n];
for i in 0..n {
if !f { break; }
ok -= tag[i];
let tmp = if i + mid > n { (i + mid - n) } else { 0 };
if ok < tmp as i32 {
f = false;
break;
}
ok += 1;
let pos_i = i as i32 + a[i] + ok - tmp as i32;
let pos = pos_i as usize;
if pos < n {
tag[pos] += 1;
}
}
if f {
l = mid;
} else {
r = mid;
}
}
writeln!(out, "{}", l).unwrap();
}
fn main() {
io_init!(scan, out);
read!(scan, t=>i32);
for _ in 0..t {
solve(&mut scan, out);
}
}
I1thbGxvdyh1bnVzZWRfaW1wb3J0cyldCnVzZSBzdGQ6OmNtcDo6e21heH07CnVzZSBzdGQ6OmlvOjp7QnVmV3JpdGVyLCBzdGRpbiwgc3Rkb3V0LCBXcml0ZX07CgojW2Rlcml2ZShEZWZhdWx0KV0Kc3RydWN0IFNjYW5uZXIgeyBidWZmZXI6IFZlYzxTdHJpbmc+IH0KaW1wbCBTY2FubmVyIHsKICAgIGZuIG5leHQ8VDogc3RkOjpzdHI6OkZyb21TdHI+KCZtdXQgc2VsZikgLT4gVCB7CiAgICAgICAgbG9vcCB7CiAgICAgICAgICAgIGlmIGxldCBTb21lKHRvaykgPSBzZWxmLmJ1ZmZlci5wb3AoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnBhcnNlKCkub2soKS5leHBlY3QoIkZhaWxlZCBwYXJzZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxldCBtdXQgcyA9IFN0cmluZzo6bmV3KCk7CiAgICAgICAgICAgIHN0ZGluKCkucmVhZF9saW5lKCZtdXQgcykuZXhwZWN0KCJGYWlsZWQgcmVhZCIpOwogICAgICAgICAgICBzZWxmLmJ1ZmZlciA9IHMuc3BsaXRfd2hpdGVzcGFjZSgpLnJldigpLm1hcChTdHJpbmc6OmZyb20pLmNvbGxlY3QoKTsKICAgICAgICB9CiAgICB9Cn0KCiNbYWxsb3codW51c2VkX3ZhcmlhYmxlcyldCm1hY3JvX3J1bGVzISBpb19pbml0IHsKICAgICgkc2NhbjppZGVudCwgJG91dDppZGVudCkgPT4gewogICAgICAgIGxldCBtdXQgJHNjYW46IFNjYW5uZXIgPSBTY2FubmVyOjpkZWZhdWx0KCk7CiAgICAgICAgbGV0ICRvdXQgPSAmbXV0IEJ1ZldyaXRlcjo6bmV3KHN0ZG91dCgpKTsKICAgIH07Cn0KCm1hY3JvX3J1bGVzISByZWFkIHsKICAgICgkc2NhbjppZGVudCwgJCgkdjpwYXQ9PiR0OnR5KSwqKSA9PiB7ICQobGV0ICR2PSRzY2FuLm5leHQ6OjwkdD4oKTspKiB9Owp9CgpmbiBzb2x2ZShzY2FuOiAmbXV0IFNjYW5uZXIsIG91dDogJm11dCBCdWZXcml0ZXI8c3RkOjppbzo6U3Rkb3V0PikgewogICAgbGV0IG4gPSBzY2FuLm5leHQ6Ojx1c2l6ZT4oKTsKICAgIGxldCBtdXQgYSA9IFZlYzo6d2l0aF9jYXBhY2l0eShuKTsKICAgIGZvciBfIGluIDAuLm4gewogICAgICAgIGEucHVzaChzY2FuLm5leHQ6OjxpMzI+KCkpOwogICAgfQogICAgbGV0IG11dCBsID0gMXVzaXplOwogICAgbGV0IG11dCByID0gbiArIDE7CiAgICB3aGlsZSBsICsgMSA8IHIgewogICAgICAgIGxldCBtaWQgPSAobCArIHIpID4+IDE7CiAgICAgICAgbGV0IG11dCBvayA9IDBpMzI7CiAgICAgICAgbGV0IG11dCBmID0gdHJ1ZTsKICAgICAgICBsZXQgbXV0IHRhZyA9IHZlYyFbMGkzMjsgMiAqIG5dOwogICAgICAgIGZvciBpIGluIDAuLm4gewogICAgICAgICAgICBpZiAhZiB7IGJyZWFrOyB9CiAgICAgICAgICAgIG9rIC09IHRhZ1tpXTsKICAgICAgICAgICAgbGV0IHRtcCA9IGlmIGkgKyBtaWQgPiBuIHsgKGkgKyBtaWQgLSBuKSB9IGVsc2UgeyAwIH07CiAgICAgICAgICAgIGlmIG9rIDwgdG1wIGFzIGkzMiB7CiAgICAgICAgICAgICAgICBmID0gZmFsc2U7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBvayArPSAxOwogICAgICAgICAgICBsZXQgcG9zX2kgPSBpIGFzIGkzMiArIGFbaV0gKyBvayAtIHRtcCBhcyBpMzI7CiAgICAgICAgICAgIGxldCBwb3MgPSBwb3NfaSBhcyB1c2l6ZTsKICAgICAgICAgICAgaWYgcG9zIDwgbiB7CiAgICAgICAgICAgICAgICB0YWdbcG9zXSArPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIGYgewogICAgICAgICAgICBsID0gbWlkOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHIgPSBtaWQ7CiAgICAgICAgfQogICAgfQogICAgd3JpdGVsbiEob3V0LCAie30iLCBsKS51bndyYXAoKTsKfQoKZm4gbWFpbigpIHsKICAgIGlvX2luaXQhKHNjYW4sIG91dCk7CiAgICByZWFkIShzY2FuLCB0PT5pMzIpOwogICAgZm9yIF8gaW4gMC4udCB7CiAgICAgICAgc29sdmUoJm11dCBzY2FuLCBvdXQpOwogICAgfQp9Cg==
OAoyCjEgMgo0CjIgMSAwIDAKMTAKNSA5IDMgNyAxIDUgMSA1IDQgMwoxMAoxIDEgMSAxIDEgMSAxIDEgMSAxCjEwCjMgMiAxIDAgMyAyIDEgMCAzIDIKNQo1IDIgMCA1IDUKMQoxMDAwMDAwMDAwCjcKNCAwIDEgMCAyIDcgNwo=
8
2
1 2
4
2 1 0 0
10
5 9 3 7 1 5 1 5 4 3
10
1 1 1 1 1 1 1 1 1 1
10
3 2 1 0 3 2 1 0 3 2
5
5 2 0 5 5
1
1000000000
7
4 0 1 0 2 7 7