docs: private void clinkstep3(DBIDRef id, DBIDArrayIter i, int n, WritableDBIDDataStore pi, WritableDoubleDataStore lambda, WritableDoubleDataStore m) {
      DBIDVar p_i = DBIDUtil.newVar();
      // for i = 1..n
      for(i.seek(0); i.getOffset() < n; i.advance()) {
        double l_i = lambda.doubleValue(i);
        double m_i = m.doubleValue(i);
  
        // if L(i) < M(i)
        if(l_i < m_i) {
          p_i.from(pi, i); // p_i = pi(it)
          double mp_i = m.doubleValue(p_i);
          // M(P(i)) = max { M(P(i)), M(i) }
          if(mp_i < m_i) {
            m.putDouble(p_i, m_i);
          }
  
          // M(i) = inf
          m.putDouble(i, Double.POSITIVE_INFINITY);
        }
      }
    }