http://www.spoj.com/problems/CTRICK/ spojの問題です
マジシャンはカードの小さなパックをシャッフルし、それを裏向きにして、次の手順を実行します。
一番上のカードがパックの一番下に移動します。新しいトップカードが表向きにテーブルに配られます。スペードのエースです。
2 枚のカードを上から下に 1 つずつ移動します。次のカードが表向きにテーブルに配られます。スペードのツーです。
3 枚のカードが 1 つずつ移動されます…</p>
これは、n 番目と最後のカードがスペードの n になるまで続きます。
この印象的なトリックは、マジシャンが事前にカードの配置方法を知っている場合 (および偽のシャッフルの方法を知っている場合) に機能します。プログラムは、1 ≤ n ≤ 20000 の指定された数のカードのカードの最初の順序を決定する必要があります。
入力
入力の最初の行は、1 つの正の整数であり、従うべきテスト ケースの数を示します。各ケースは、整数 n を含む 1 行で構成されます。出力
テスト ケースごとに、値 1 から n の正しい順列をスペースで区切って行を出力します。パックの一番上のカードを示す最初の数字など…例
入力: 2
4
5
出力:
2 1 4 3
3 1 4 5 2
今私が考えることができる唯一の解決策は、キューを使用してプロセスをシミュレートすることです。しかし、それはO(n ^ 2)になります。コメントを読んだところ、BITのセグメントツリーを使用することが提案されました。セグメント ツリーと BIT の両方を知っていますが、この質問でそれらを実装する方法を理解できません。これを行う方法を提案してください。ありがとう