参照で直して lower_bound で探す
品物 n 個の名前・価格・在庫を構造体(struct)の std::vector に入れ、コマンド m 個で直したあと、問い合わせ q 個に答えよ。
品物を名前で探す関数は vector の中の要素を参照(Item&)で返し、直す関数はその参照を受け取って要素をその場で変える。
コマンドをすべて処理したあと、ラムダの比較関数を渡した std::sort で、価格の安い順、価格が同じなら名前の辞書順に並べる。
問い合わせには std::lower_bound で答える。
最初の行に n が、続く n 行に "名前 価格 在庫" が与えられる。
次の行に m が、続く m 行にコマンドが "sell 名前 k"、"restock 名前 k"、"price 名前 p" のいずれかで与えられる。
sell は在庫が k 個以上あれば k 個減らし、足りなければ何も変えない。
restock は在庫に k を足す。
price は価格を p に変える。
次の行に q が、続く q 行に整数 x が一つずつ与えられる。
問い合わせごとに、並べたリストで価格が x より安い品物の数 c と、価格が x 以上の最初の品物を "c 名前 価格 在庫" と出力する。
そのような品物がなければ "c none" を出力する。
- 入力
- 1 ≤ n ≤ 1000、0 ≤ m ≤ 1000、1 ≤ q ≤ 1000。
名前は英小文字 1〜8 文字ですべて異なり、コマンドには存在する名前だけが出る。
1 ≤ 価格, p ≤ 1,000,000,000。
最初の在庫は 0〜1000、1 ≤ k ≤ 1,000,000。
1 ≤ x ≤ 1,000,000,001(すべて整数) - 出力
- 問い合わせごとに一行
4 pear 7 1 fig 7 2 apple 9 3 kiwi 2 4 3 sell fig 2 sell kiwi 5 price apple 7 4 7 3 1 8
1 apple 7 3 1 apple 7 3 0 kiwi 2 4 4 none
2 tea 10 5 jam 20 5 2 restock tea 3 price tea 30 3 20 21 31
0 jam 20 5 1 tea 30 8 2 none