こういうO(1)で気合導出、みたいな問題はめちゃくちゃ苦手…
解法
早い話、ありうる部分列を列挙して重複を除去すれば答えが出る。制約が大きいので重複の仕方が爆発してダメそうに見えるが、重複している数字が1個しかないので、重複の仕方を上手く見つけて場合分けすれば計算できる。
重複している数字をと置いてで数列を区切り、それぞれ左から区間をとする。
それぞれの区間から1個も使わないときと1個以上使うときをに対応させると、
の4つの組が重複していることに気づける。
なので、それぞれのに対してから以上4つの場合の数を引けば答えが出る。
については、のときにだけを引けばよい。
については、からそれぞれ個を選ぶ数(1個はのために予約している)なので、それぞれとなる。
については、双方から最低でも1個ずつ選んだうえで合計個選ぶ数なので、から、片方からだけ個選んでしまう数を引けばよく、結局、となる。
以上から、のときは、、それ以外のときはが答えとなる。
時間計算量については、二項係数が階乗、逆元の階乗の前計算によってで求まるので、全体としてとなる。
実装例は以下。