0-basedで考える。列をに分けた時に、左右の和を等しくするようなスワップが何個あるか数える。まず、右の和のほうが大きいことが有効なスワップが存在する必要条件である。右の和が左の和よりだけ大きいとする。このとき、が偶数なら左の区間のと右の区間のを交換すると和が等しくなる。添え字が有効である条件はで、これはとまとまる。この区間の長さが有効なスワップの数に等しいので、すべてのについて足せばよい。ただしの場合は区間をまたいで数を移動する必要がないので特別扱いして、左の区間内と右の区間内のスワップの総数を数える。
さて、が必要なことを考えると、有効なは多くないはずだ。が増加するとき、が正から負に変わる地点を考えると、この地点は全体の半分よりは右にあるはずだから、その付近ではが動くごとにおおむね程度はが変化することになる。したがって、高々3つ程度のについて数えれば十分という見積もりができる。実装の際はであるような最大のを二分探索などで求めておいて、そこから下っていけばよい。