主客転倒がすんなり発想できたけど、実装バグって間に合わなかった。
残念だったので簡単に書いておく。
2点だけを決めると真ん中に一つの不動点ができる。
いわゆる主客転倒で、この不動点が現れる組み合わせを数える。
任意の2点 , ()を決めた時、
- ,の間には他に選ばれる点はない。(間の点を選ぶと、別の不動点ができるか、同じ位置に別の2点によって不動点がつくられる)
- ,の距離をとするとき、から左により大離れた点は選んでも選ばなくても影響しない。(等しい場合が左に動いてしまう)
- ,の距離をとするとき、から右に以上離れた点は選んでも選ばなくても影響しない。(等しいときはは左に動くので影響しない)
よって選んでも選ばなくても良い左側の点の数を、右をとして、
任意の,にたいして、
が答え。
本番では,を2分探索で求めようとしてバグってしまった。
,を両端キューで管理して、尺取のような要領で管理したほうが楽だった。(を決めた時、を動かしていくとは単調増加)