description: Pchelyonok decided to give Mila a gift. Pchelenok has already bought an array a of length n, but gifting an array is too common. Instead of that, he decided to gift Mila the segments of that array!
  
  Pchelyonok wants his gift to be beautiful, so he decided to choose k non-overlapping segments of the array [l_1,r_1], [l_2,r_2], … [l_k,r_k] such that:
  
    * the length of the first segment [l_1,r_1] is k, the length of the second segment [l_2,r_2] is k-1, …, the length of the k-th segment [l_k,r_k] is 1 
    * for each i<j, the i-th segment occurs in the array earlier than the j-th (i.e. r_i<l_j) 
    * the sums in these segments are strictly increasing (i.e. let sum(l … r) = ∑_{i=l}^{r} a_i — the sum of numbers in the segment [l,r] of the array, then sum(l_1 … r_1) < sum(l_2 … r_2) < … < sum(l_k … r_k)). 
  
  
  
  Pchelenok also wants his gift to be as beautiful as possible, so he asks you to find the maximal value of k such that he can give Mila a gift!
  
  Input
  
  The first line contains a single integer t (1 ≤ t ≤ 100) — the number of test cases. The next 2 ⋅ t lines contain the descriptions of test cases. The description of each test case consists of two lines.
  
  The first line of each test case contains a single integer n (1 ≤ n ≤ 10^5) — the length of the array.
  
  The second line contains n integers a_1, a_2, …, a_n (1 ≤ a_i ≤ 10^9) — the elements of the array a.
  
  It is guaranteed that the sum of n over all test cases does not exceed 10^5.
  
  Output
  
  For each test case, print the maximum possible value of k.
  
  Example
  
  Input
  
  
  5
  1
  1
  3
  1 2 3
  5
  1 1 2 2 3
  7
  1 2 1 1 3 2 6
  5
  9 6 7 9 7
  
  
  Output
  
  
  1
  1
  2
  3
  1
solution: //package Codeforces.Round750Div2;
  
  import java.io.*;
  import java.util.*;
  
  public class E {
      static int getMaxK(int n){
          return (int) ((Math.sqrt(1+8*n) - 1)/2);
      }
      public static void main(String[] args) throws IOException {
          Soumit sc = new Soumit();
  
          int t = sc.nextInt();
          StringBuilder sb = new StringBuilder();
          while (t-->0){
              int n = sc.nextInt();
              long[] arr = sc.nextLongArray(n);
  
              long[] prefixsum = new long[n];
              prefixsum[0] = arr[0];
              for(int i=1;i<n;i++){
                  prefixsum[i] = prefixsum[i-1] + arr[i];
              }
  
              int limk = getMaxK(n);
              long[][] dp = new long[limk][n];
              int max = 1;
  
              dp[0][n-1] = arr[n-1];
              for(int i=n-2;i>=0;i--){
                  dp[0][i] = Math.max(arr[i], dp[0][i+1]);
              }
              for(int i=2;i<=limk;i++){
                  for(int j=n-(i*(i-1))/2-1;j>=i-1;j--){
                      long cursegsum = prefixsum[j];
                      if(j-i>=0)
                          cursegsum -= prefixsum[j-i];
  
                      if(cursegsum<dp[i-2][j+i-1]){
                          dp[i-1][j] = cursegsum;
                          if(j!=n-(i*(i-1))/2-1){
                              dp[i-1][j] = Math.max(dp[i-1][j+1], cursegsum);
                          }
                          max = i;
                      }
                      else{
                          dp[i-1][j] = dp[i-1][j+1];
                      }
                  }
              }
  
              sb.append(max).append("\n");
          }
  
          System.out.println(sb);
  
          sc.close();
      }
  
      static class Soumit {
          final private int BUFFER_SIZE = 1 << 18;
          final private DataInputStream din;
          final private byte[] buffer;
          private PrintWriter pw;
          private int bufferPointer, bytesRead;
          StringTokenizer st;
  
          public Soumit() {
              din = new DataInputStream(System.in);
              buffer = new byte[BUFFER_SIZE];
              bufferPointer = bytesRead = 0;
          }
  
          public Soumit(String file_name) throws IOException {
              din = new DataInputStream(new FileInputStream(file_name));
              buffer = new byte[BUFFER_SIZE];
              bufferPointer = bytesRead = 0;
          }
  
          public void streamOutput(String file) throws IOException {
              FileWriter fw = new FileWriter(file);
              BufferedWriter bw = new BufferedWriter(fw);
              pw = new PrintWriter(bw);
          }
  
          public void println(String a) {
              pw.println(a);
          }
  
          public void print(String a) {
              pw.print(a);
          }
  
          public String readLine() throws IOException {
              byte[] buf = new byte[3000064]; // line length
              int cnt = 0, c;
              while ((c = read()) != -1) {
                  if (c == '\n')
                      break;
                  buf[cnt++] = (byte) c;
              }
              return new String(buf, 0, cnt);
          }
  
          String next() {
              while (st == null || !st.hasMoreElements()) {
                  try {
                      st = new StringTokenizer(readLine());
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
              }
              return st.nextToken();
          }
  
          public void sort(int[] arr) {
              ArrayList<Integer> arlist = new ArrayList<>();
              for (int i : arr)
                  arlist.add(i);
  
              Collections.sort(arlist);
              for (int i = 0; i < arr.length; i++)
                  arr[i] = arlist.get(i);
          }
  
          public void sort(long[] arr) {
              ArrayList<Long> arlist = new ArrayList<>();
              for (long i : arr)
                  arlist.add(i);
  
              Collections.sort(arlist);
              for (int i = 0; i < arr.length; i++)
                  arr[i] = arlist.get(i);
          }
  
          public int[] nextIntArray(int n) throws IOException {
              int[] arr = new int[n];
              for (int i = 0; i < n; i++) {
                  arr[i] = nextInt();
              }
  
              return arr;
          }
  
          public long[] nextLongArray(int n) throws IOException {
              long[] arr = new long[n];
              for (int i = 0; i < n; i++) {
                  arr[i] = nextLong();
              }
  
              return arr;
          }
  
          public double[] nextDoubleArray(int n) throws IOException {
              double[] arr = new double[n];
              for (int i = 0; i < n; i++) {
                  arr[i] = nextDouble();
              }
  
              return arr;
          }
  
          public int nextInt() throws IOException {
              int ret = 0;
              byte c = read();
              while (c <= ' ')
                  c = read();
              boolean neg = (c == '-');
              if (neg)
                  c = read();
              do {
                  ret = ret * 10 + c - '0';
              } while ((c = read()) >= '0' && c <= '9');
  
              if (neg)
                  return -ret;
              return ret;
          }
  
          public long nextLong() throws IOException {
              long ret = 0;
              byte c = read();
              while (c <= ' ')
                  c = read();
              boolean neg = (c == '-');
              if (neg)
                  c = read();
              do {
                  ret = ret * 10 + c - '0';
              }
              while ((c = read()) >= '0' && c <= '9');
              if (neg)
                  return -ret;
              return ret;
          }
  
          public double nextDouble() throws IOException {
              double ret = 0, div = 1;
              byte c = read();
              while (c <= ' ')
                  c = read();
              boolean neg = (c == '-');
              if (neg)
                  c = read();
  
              do {
                  ret = ret * 10 + c - '0';
              }
              while ((c = read()) >= '0' && c <= '9');
  
              if (c == '.') {
                  while ((c = read()) >= '0' && c <= '9') {
                      ret += (c - '0') / (div *= 10);
                  }
              }
  
              if (neg)
                  return -ret;
              return ret;
          }
  
          private void fillBuffer() throws IOException {
              bytesRead = din.read(buffer, bufferPointer = 0, BUFFER_SIZE);
              if (bytesRead == -1)
                  buffer[0] = -1;
          }
  
          private byte read() throws IOException {
              if (bufferPointer == bytesRead)
                  fillBuffer();
              return buffer[bufferPointer++];
          }
  
          public void close() throws IOException {
              /*if (din == null)
                  return;*/
              if (din != null) din.close();
              if (pw != null) pw.close();
          }
      }
  }
  