No.97 最大の値を求めるくえり
問題文最終更新日: 2015-11-14 17:46:36
問題文
長さ$N$の数列$A$が与えられる。 クエリとして、$q_i$が与えられるので、$\{ {(q_i \times a)} \bmod {100003} \mid a \in A \}$ 中の最大値を求めよ。 ただし、$x \bmod y$は$x$を$y$で割った余りを表す。
$A$は直接は与えらない。かわりに以下のコードでgenerateAを呼んだのと同等に生成せよ。
unsigned xor128_x = 123456789, xor128_y = 362436069, xor128_z = 521288629, xor128_w = 88675123; unsigned xor128() { unsigned t = xor128_x ^ (xor128_x << 11); xor128_x = xor128_y; xor128_y = xor128_z; xor128_z = xor128_w; return xor128_w = xor128_w ^ (xor128_w >> 19) ^ (t ^ (t >> 8)); } void generateA(int N, int A[]) { for(int i = 0; i < N; ++ i) A[i] = xor128() % 100003; }
入力
$N$ $Q$ $q_1$ $\vdots$ $q_Q$
1行目に空白区切りで2つの整数$1 \le N, Q \le 100003$が与えられる。 2行目以降$Q$行、各クエリを表す整数$0 \le q_i < 100003$が与えられる。 数列$A$は入力としては与えられず、上記のコードのように生成しなければならないことに注意せよ。
出力
クエリごとに答えを出力し改行せよ。
サンプル
サンプル1
入力
3 3 1 100 100002
出力
97597 73872 23262
$A = [76741, 85364, 97597]$となる。各クエリではそれぞれ、$1 \times 97597$, $100 \times 76741$, $100002 \times 76741$を100003で割った余りが最大の値となる。
サンプル2
入力
100003 3 1 2 100002
出力
100002 100002 100001
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。