Solution (source code)

= Solution

Let the active block have size $m$. Using a stored skew triangle, the product $Dv$ costs $m(m-1)$ scalar multiplications: two for each unordered off-diagonal pair. Updating its stored triangle with $vw^T-wv^T$ costs another $m(m-1)$ products. Reflector construction, scalings and the active column take only $O(m)$ additional products. Summing over $m=n-1,\ldots,2$ gives
$$
\boxed{\text{skew-symmetric cost}=\frac23n^3+O(n^2)\text{ products}}.
$$

For a symmetric block, an optimized matrix-vector calculation costs $m^2$ products, and the symmetric rank-two update of one triangle costs $m(m+1)$ products. The additional scalar $v^TDv$ and its correction to the update <vector> cost only $O(m)$ per step. Thus
$$
\boxed{\text{symmetric cost}=\frac23n^3+O(n^2)\text{ products}}.
$$
The leading terms are the same under the requested product-count convention. Skew symmetry removes the diagonal work and the scalar correction, giving lower-order savings, not a factor-of-two leading advantage over an already symmetry-aware implementation. Counting additions as well would change the reported flop constants; it is not the convention requested here.