この問題は、Mo's Algorithm を用いることで解くことができます。
区間 に対して答えを求められたとき、この区間の両端を追加、削除するときの処理を考えてみましょう。
まず、以下の配列を定義します。
区間の中にある の個数
区間の中にある値の個数が であるような個数 (つまり、 = を満たす の個数)
そうすると、区間の両端の追加、削除は以下のように処理できます。
〇 区間の長さが 、または であった場合には が答えになる。
〇 が であるかつ、答えが と等しい場合は答えを 増加させる。
〇 削除したあとに区間の長さが になる場合は何も行わない。
〇 が 以上であるかつ、答えが と等しい場合は答えを 減少させる。
〇 が であるかつ、 が である場合は、答えを を満たす最小の に変更する (二分探索などを用いる)。
上記の処理を行った後に、、 の更新を行うことでこの問題を解くことができます。
結果として、この問題を で解くことができ、十分に高速です。