docs: protected void updateMatrix(int end, MatrixParadigm mat, PointerHierarchyRepresentationBuilder builder, double mindist, int x, int y, final int sizex, final int sizey) {
      // Update distance matrix. Note: y < x
      final int xbase = MatrixParadigm.triangleSize(x);
      final int ybase = MatrixParadigm.triangleSize(y);
      double[] scratch = mat.matrix;
      DBIDArrayIter ij = mat.ix;
  
      // Write to (y, j), with j < y
      int j = 0;
      for(; j < y; j++) {
        if(builder.isLinked(ij.seek(j))) {
          continue;
        }
        assert (j < y); // Otherwise, ybase + j is the wrong position!
        final int yb = ybase + j;
        scratch[yb] = linkage.combine(sizex, scratch[xbase + j], sizey, scratch[yb], builder.getSize(ij), mindist);
      }
      j++; // Skip y
      // Write to (j, y), with y < j < x
      int jbase = MatrixParadigm.triangleSize(j);
      for(; j < x; jbase += j++) {
        if(builder.isLinked(ij.seek(j))) {
          continue;
        }
        final int jb = jbase + y;
        scratch[jb] = linkage.combine(sizex, scratch[xbase + j], sizey, scratch[jb], builder.getSize(ij), mindist);
      }
      jbase += j++; // Skip x
      // Write to (j, y), with y < x < j
      for(; j < end; jbase += j++) {
        if(builder.isLinked(ij.seek(j))) {
          continue;
        }
        final int jb = jbase + y;
        scratch[jb] = linkage.combine(sizex, scratch[jbase + x], sizey, scratch[jb], builder.getSize(ij), mindist);
      }
    }