Educational Codeforces #95 D Trash Problem
問題はこちら
問題概要
数直線上の思考の流れ
集める2か所の決め方を考える. 集めるゴミは区間になっていることは簡単にわかる. 左側の1か所に集めるゴミのindexを
追加・削除のクエリ後にの最大値を求められればいい. 追加・削除・最大値取得ができるデータ構造といえば, 平衡二分木などがある. ちょうどC++のsetの機能で実現できるので解ける.
追加クエリでは追加する座標をとすると,
と隣り合ったゴミの座標
をもとめてsetに
,
を追加し, 今まであった
を消せばよい. 削除クエリも同様に行う.