Educational Codeforces Round 29 F. Almost Permutation

想定解はフローだが、離散凸解析をちょっと知っていると、目的関数がM凸なので、交換を繰り返すと解けることが分かる。

実際、Benqは本番これで通しているらしい

f:id:potetisensei:20200712204017p:plain

 

これを証明する。

問題文中で定義されている目的関数をfとする。これがM凸であることを示す。

まずfの定義域である、実行可能解の集合Sが整基集合(とりあえずM凸関数のステートメントが成立するような集合と考えていい)であることを示す。

 

f:id:potetisensei:20200712211537j:plain

f:id:potetisensei:20200712211547j:plain

↑ノリでm+1にしたけどmでよかったな

f:id:potetisensei:20200712211555j:plain


これはかなり雑、というかこの書き方だと、「対称性からy + e_i - e_jも実行可能解」が成立してないけど、1..nを頂点としたグラフ(辺は、数列の各要素kに関してL[k]からR[k]までの全てのペアに張る)上のpathをイメージするとできることは明らか

 

これさえ証明しておくと、M凸なのは2次関数の和だからかなり自明

f:id:potetisensei:20200712211605j:plain

 

実際これで通る。

https://codeforces.com/contest/863/submission/86645365

多分最悪計算量はO(N^4logN)とか(は?)

な気がする