九州大学プログラミングコンテスト2018-E:Treeone
問題
https://beta.atcoder.jp/contests/qupc2018/tasks/qupc2018_e
個の要素をもつ数列 が与えられる。たぴさを数列の連続する部分列のうち、総和が である個数とする。数列のある つの要素を任意の数に変更できるとき、たぴさの最小値を求めよ。
制約
考え方
もとの数列について部分列の総和が になる個数については、Zero-Sum Ranges と同じである。
ある要素 を INF に変更する操作について考える。 がもとの数列で になる部分列の区間の中に含まれる場合、その部分列の総和が でなくなる。もとの数列で になる部分列の区間の中に含まれなかった場合は変わらない。
よってたぴさの最小値を求めるとき、 がもとの数列で総和が になる部分列の区間に含まれる最大数をもとめて、それを引けば良い。
ある要素に対して、どれだけの区間が含まれるのか?という情報を求める必要がある。これは imos 法で求めることができる。
累積和の数列を としておく。
これらは左、右の要素から累積和をとることでそれぞれ求めることができる。あとは imos 法を適応させて区間の重なりを求めれば解くことができる。
Submission #3443575 - 九州大学プログラミングコンテスト2018
ポイント
- 複数区間の重なり⇒imos法の適応方法