問題はこちら
問題概要
種類目のカードの得点を
に変更
種類目のカードの枚数を
に変更
枚のカードを選ぶときの得点の総和の最大値を求める.
解説
各ノードに部分木の得点の総和とカードの枚数の総和を持つBinary Trieを作ると,各クエリサンプル1を例に挙げて説明します.
初期状態のBinaryTrieは以下のようになります.

最初のクエリでは,枚使った最大の総得点を求めます.
根の右の子の枚数がであることから左の子のカードを使うことはありません.したがって,右の部分木について答えればよいです.
そのさらに右の子を見ると,枚数が枚なので右の子のカードはすべて使い,
として左の子に遷移して再帰的に求めていけばよいです.
2番目のクエリや4番目のクエリのような更新では,更新前の得点や枚数を各ノードから引き,更新後の得点や枚数を足していけばよいです.