#arc049d. [arc049_d]すわっぷしまーす
[arc049_d]すわっぷしまーす
問題文
高橋君は旅行先で、「すわっぷしまーす」という不思議な完全二分木を観光しました。
「すわっぷしまーす」は、高さが で葉の個数が の完全二分木です。そして、葉には左から順に と数が書かれています。
また、葉以外の頂点について、上から 段目 、左から 番目 ならば位置 となるように位置というものを定義します。
さらに、 というものを定義します。これは、位置 となる頂点を求め、左右の部分木を入れ替えるという動作です。
「すわっぷしまーす」は、以下の 種類のクエリを処理できます。
タイプ1: が与えられるので、左から 番目の葉に書かれた数を求める。
タイプ2: が与えられるので、${\\rm swap}(a), {\\rm swap}(a+1), {\\rm swap}(a+2), ..., {\\rm swap}(b)$ と、この順番で実行する。
高橋君は、旅行から帰った後、自分でも「すわっぷしまーす」を作りたくなりました。しかしなかなか難しいので、あなたが代わりに作ることになりました。
具体的には、 と、 個のクエリが与えられるので、それを処理できるような「すわっぷしまーす」を作ってください。
入力
入力は以下の形式で標準入力から与えられる。
:
- 行目には整数 , が空白区切りで与えられる。
- 行目から 行には、クエリの内容が与えられる。そのうち 行目には、 つの整数 , , が空白区切りで与えられる。
- の時、タイプ1のクエリである。 が問題文中の を表し、 は必ず である。
- の時、タイプ2のクエリである。 , はそれぞれ問題文中の , を表す。
出力
タイプ1のクエリが来る度に、求めた値を出力する。出力する度に改行を入れる事。
入力例1
3 10
2 5 5
1 1 0
1 2 0
1 3 0
1 4 0
2 1 3
1 2 0
1 3 0
1 5 0
1 6 0
出力例1
1
2
4
3
8
5
4
3
このサンプルでは、2回タイプ2のクエリが来ます。
1回目のタイプ2のクエリの後は下図のようになっています。
2回目のタイプ2のクエリの後は下図のようになっています。