code: private void merge(int[] vs, int lo, int split, int len, long[] curr, long[] prev) {
          System.arraycopy(vs, lo, aux, lo, len);
  
          int i = lo, j = lo + split;
          int iMax = lo + split, jMax = lo + len;
          for (int k = lo, end = lo + len; k < end; k++) {
              if (i == iMax)
                  vs[k] = aux[j++];
              else if (j == jMax)
                  vs[k] = aux[i++];
              else if (less(aux[i], aux[j], curr, prev))
                  vs[k] = aux[i++];
              else
                  vs[k] = aux[j++];
          }
      }
docs: Merge the values which are sorted between {@code lo} - {@code split} and
  {@code split} - {@code len}.
  
  @param vs    vertices
  @param lo    start index
  @param split the middle index (partition)
  @param len   the range to merge
  @param curr  the current invariants
  @param prev  the previous invariants