Codeforces#613-E:Delete a Segment
遅延セグ木で殴るのは、気持ちがいい。
問題
https://codeforces.com/contest/1285/problem/E
解法
座標について、その座標を覆う区間の数をとする。求めるものは、(考えるべき座標の両端のの値が0であることにすると)上でが連続している部分(つまり区間)の数からを引いたものになる。この値が区間を1つ取り除いたときにどうなるかを調べたい。
ここで、遅延セグ木を用いてこの全探索を行うことを考える。各区間に持たせるべき情報を考えよう。まず、の区間の数は当然必要である。また、区間のマージを考えると、今考えている区間の左/右端がかどうかという情報も必要であるとわかる。さらに、区間のの値を引いたり足したりするので、がのときについても、と同様の情報を持たせるべきであるとわかる。区間への作用が心配だが、今回はかのどちらかで、区間を一度取り除いて戻すということしかしないため、適切にとの値を更新するだけでうまくいくというのがミソになる。
実装
https://codeforces.com/contest/1285/submission/68552603
セグ木力の向上を実感できてよかった。