AGC056B-Range Argmax
解説の補足程度
基本方針
各について、を作るのうち辞書順最大のものと一対一対応をさせる
これにより、そのようなを数え上げる問題になる
以下0-indexed
の値を降順に決めていくことを考える
つまり、を前から決めていく
上から決めていくことで、使用した index を含む各区間はの値が決まっていることになる
とした時の例
上の例では、を含む2つの区間はの値が決まったことになる
したがって、[0,3]
と[5,9]
についての問題に出来たように見える
(p[0,3]=[5,8]
p[5,9]=[0,4]
のように使う)
しかし、このような key が の区間DPでは辞書順最大でないも数えてしまう
(中略)
したがって、 として良いは、を含む区間に含まれている必要がある
つまり、上の例では [0,3]で最大値のindexが2以上
と[5,9]
についての問題に帰着される
そこで、
dp[l][r][m]:[l,r]の順列で最大値のindexがm以上となるものの個数
という区間DPを考える
遷移をで行えれば良く、以下の式変形に注目する
したがって、最大値のindexをとした時の値を考えればよく、これは
であるから、前計算などでを求めれば良い
コード