ゲームには常にランダム性がたくさんあるので、エディはトランプゲームをするのが好きです。ほとんどのカードゲームでは、ゲームの最初のステップはカードをシャッフルすることです。そして、ほとんどの場合、ゲームのランダム性はこのステップからのものです。しかし、エディは、シャッフルがうまく行われなかった場合、カードの順序が予測可能であると疑っています!
それを証明するために、エディはカードをシャッフルしたいと考えており、カードの最終的な順序を予測しようとします。実際、エディはカードをシャッフルする唯一の方法を知っています。それは、いくつかの真ん中の連続したカードを取り、それらを残りの上に置くことです。カードをシャッフルするとき、エディはこの手順を繰り返し続けます。数ラウンド後、エディはカードの順番を見失い、彼の仮定が間違っていると信じています。エディの友達として、あなたは彼がそのような愚かなことをしているのを見ていて、彼がしたすべての動きを簡単に覚えています。今度は、エディにカードの最終的な順序を、彼を驚かせる魔法として伝えます。
エディは最初、カードが上から下に1からNまでの番号であることを示しました。
たとえば、5枚のカードがあり、Eddyは1回のシャッフルを行いました。彼は上から2番目のカードから上から4番目のカード(1からインデックス付け)を取り出し、残りのカードの上に置きます。その場合、カードの最終的な順序は[2,3,4,1,5]になります。
入力
最初の行には、スペースで区切られた2つの整数Nが含まれています。Mは、カードの数とEddyが実行したシャッフルの数を示します。
次のM行のそれぞれには、スペースで区切られた2つの整数piが含まれています。カード。
1≤Nは、M≤105
1≤pi≤N
1≤si≤N-PI + 1
出力
を出力1本のライン上から下へのカードの最終的な順序を示すN個のスペースで区切られた整数を含みます。
実施例
インプット
5 1
2 3
出力
1 2 3 4 5
入力
5 2
2 3
2 3
出力
3 4 1 2 5
入力
5 3
2 3
1 4
2 4
出力
3 4 1 5 2
質問の意味:
シーケンス、段落が中央から取られて前に配置されるたびに、最後のシーケンスが必要です。
アイデア:
バランスの取れた木やロープで実現できます
#include <ext/rope>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace __gnu_cxx;
using namespace std;
int main() {
int n,m;scanf("%d%d",&n,&m);
rope<int>now;
for(int i = 1;i <= n;i++) now.push_back(i);
for(int i = 1;i <= m;i++) {
int x,y;scanf("%d%d",&x,&y);
rope<int>tmp;
now = now.substr(x - 1,y) + now.substr(0,x - 1) + now.substr(x + y - 1,n - (x + y - 1));
}
for(int i = 0;i < n;i++) {
cout << now.at(i) << " ";
}
return 0;
}