更新がなければwavelet matrixで解ける。更新がある場合、更新が起こる位置が高々6種類しかないことを利用できそう。列ををそれぞれ含む/含まないという分類によって、個の列に分解すると、更新は個々の部分列に対する定数加算として記録できる。質問クエリに対しては、各部分列のに対応する区間について「以下の要素は何個あるか?」という問いに答えられれば、その総和が以上となるような最小のが答えになるので二分探索できる。これはやはりwavelet matrixでできる。
計算量は、として、クエリあたりとなる。(二分探索とwavelet matrixの処理が共に。)かなり重いがで3秒なのでぎりぎり通る。
editorialを読んだ。ほぼ同じことをやっているようだが、wavelet matrixを64個用意する必要はなくて、1個用意すればほかはその列全体に定数を足したものになっている。確かに。オーダーは変わらないがだいぶ速くなった。