h3mky0's blog

主に競プロについて書きます

SPOJ MULTQ3 - Multiple of 3

www.spoj.com

概要
次のいずれかのクエリがQ個与えられるので, クエリ1に対して結果を出力する
クエリ0 区間l, rが与えられるので, その区間の全ての要素に1を足す.
クエリ1 区間l, rが与えられるので, 3で割り切れる要素の数を出力する.



考えたこと
segment treeの要素として区間中の割った余りが0, 1, 2であるようなの要素の数を持ちたい.
1を足す操作は, その区間の要素を0あまりから1あまり, 1あまりから2あまり...といったようにずらす操作として見なすことができる. (クエリ0)
クエリ1に関しては, 区間sumのような感じで0で割り切れる要素の数だけを返してやればよい.

遅延評価の評価タイミングを勘違いしていたが, 2回ずれた時に評価されることもあるので適当に記録しておく.

提出コード
https://ideone.com/Wn8CdR

追記
これも同じような問題だった.
https://www.spoj.com/problems/LITE/