問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!
「ある数でつくられた数列」では、3つの異なる整数を何度も掛け合わせて得られる数 を 小さい順に管理 する必要があります。
通常の配列を使用すると計算量が大きくなるため、この問題では 優先度付きキュー(ヒープ)を用いる練習をしてみましょう。
priority_queue<long long, vector<long long>, greater<long long>>
を使用する-1
を掛けて、取り出す際に再度 -1
を掛けるheapq
モジュールを使用する(デフォルトで最小ヒープ)PriorityQueue
を使用する(デフォルトで最小ヒープ)
入力は以下のフォーマットで与えられます。
A_1 A_2 A_3
N
b_1
b_2
...
b_N
* 1行目 に A_1, A_2, A_3 が与えられる。
* 2行目 に N(整数の個数)が与えられる。
* 続く N 行 には、b_1, b_2, ..., b_N が1行ずつ与えられる。
入力は N+2 行 で構成され、末尾に改行が 1 つ 含まれます。
N行出力してください。i行目には、b_iを処理した後の最小の値を出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
すべてのテストケースにおいて、以下の条件をみたします。
* 入力はすべて整数
* 1 ≦ A_1, A_2, A_3 ≦ 10^9
* 1 ≦ N ≦ 10^5
* 1 ≦ b_i ≦ 10^9
2 3 5
3
4
5
6
8
10
12
3 7 11
3
5
6
7
15
18
21