AT_kupc2020_j Median Query

Description

[problemUrl]: https://atcoder.jp/contests/kupc2020/tasks/kupc2020_j **これはインタラクティブな要素がある問題です。** Alice は $ 1 $ から $ N $ までの整数を並び替えた順列 $ a_1,\ a_2,\ \ldots,\ a_N $ を隠し持っています。隠し事が嫌いな Bob はなんとかしてこの順列を特定したいです。できるだけこの順列を隠したい Alice は順列のサイズ $ N $ と以下の $ 2 $ つのタイプの質問の答えのみを教えてくれます。 - タイプ $ 1 $: $ 3 $ つの異なる整数 $ i,j,k(1\ \leq\ i,j,k\ \leq\ N) $ を選び、Alice に聞きます。すると、Alice は $ a_i,a_j,a_k $ の $ 3 $ つの整数の中央値を答えます。 - タイプ $ 2 $: $ 2 $ つの異なる整数 $ i,j(1\ \leq\ i,j\ \leq\ N) $ を選び、Alice に聞きます。すると、Alice は $ a_i,\ a_j $ の小さい方の添え字を答えます。つまり、$ a_i\ $ N $ タイプ $ 1 $ の質問をするときは次の形式に従って出力すること。 > ? $ 1 $ $ i $ $ j $ $ k $ $ i,j,k $ は $ 1 $ から $ N $ までの相異なる整数でなければならない。末尾には改行を出力すること。 タイプ $ 1 $ の質問の答えは以下の形式で与えられる。 > $ m $ $ m $ は $ 1 $ から $ N $ までの整数である。これは $ a_i,a_j,a_k $ の $ 3 $ つの整数の中央値である。 タイプ $ 2 $ の質問をするときは次の形式に従って出力すること。 > ? $ 2 $ $ i $ $ j $ $ i,j $ は $ 1 $ から $ N $ までの相異なる整数でなければならない。末尾には改行を出力すること。 タイプ $ 2 $ の質問の答えは以下の形式で与えられる。 > $ k $ $ k $ は $ i $ または $ j $ である。$ a_i\ ! $ a_1 $ $ a_2 $ $ a_3 $ $ \cdots $ $ a_N $ 順列を出力した後、あなたのプログラムは直ちに終了しなければならない。終了しなかった場合のジャッジ結果は不定である。 また、これら以外のフォーマットで出力した場合のジャッジ結果も不定である。 各出力の後には、出力をフラッシュする必要があることに注意せよ。例えば、タイプ $ 1 $ の質問をする際、 C では ``` printf("? 1 %d %d %d\n", i, j, k); fflush(stdout); ``` C++ では ``` cout

Input Format

N/A

Output Format

N/A

Explanation/Hint

### 制約 - $ 4\ \leq\ N\ \leq\ 6\ \times\ 10^4 $ ### 部分点 - タイプ $ 1 $ の質問の上限は **$ 3N $** 回、タイプ $ 2 $ の質問の上限は **$ 3 $** 回である。この上限を超えて質問をした場合は *Query Limit Exceeded* となる。 - 質問回数が上限を超えず、かつ正しい順列を出力したとき、$ 20 $ 点が得られる。 - タイプ $ 1 $ の質問が **$ 2N $** 回以内、かつタイプ $ 2 $ の質問が **$ 2 $** 回以内であり、さらに正しい順列を出力したとき、満点が得られる。 ### 入出力例 順列が "$ 3,5,4,1,2 $" である場合に、以下のような入出力が考えられる。 解答プログラムの出力 解答プログラムへの入力 説明 $ 5 $ 順列のサイズ $ 5 $ が入力として与えられる ? $ 1 $ $ 1 $ $ 2 $ $ 3 $ タイプ $ 1 $ の質問をする、$ a_1,\ a_2,\ a_3 $ の中央値を聞いている $ 4 $ $ a_1,\ a_2,\ a_3 $ の中央値は $ 4 $ である ? $ 2 $ $ 2 $ $ 4 $ タイプ $ 2 $ の質問をする、$ a_2 $ と $ a_4 $ ではどちらが小さいか聞いている $ 4 $ $ a_2\ >\ a_4 $ であるので、$ 4 $ が与えられる ? $ 1 $ $ 1 $ $ 5 $ $ 4 $ タイプ $ 1 $ の質問をする、$ a_1,\ a_5,\ a_4 $ の中央値を聞いている $ 2 $ $ a_1,\ a_5,\ a_4 $ の中央値は $ 2 $ である ! $ 3 $ $ 5 $ $ 4 $ $ 1 $ $ 2 $ 順列が "$ 3,5,4,1,2 $" であると回答しているこれは入出力の一つの例であり、意味のある入出力をしているとは限らない。