资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
初始数组A[N]中为1,2,..,N,N个数字,现要进行M次操作,每次操作给定一个数字i,记其在数组中的位置为Bi,将A[1]..A[Bi]移到数组末尾。
输入格式
输入的第一行包含两个整数N,M。接下来M行,每行一个正整数,表示给定的数字i。
输出格式
一行,输出M次操作后的A数组。
样例输入
5 2
3
2
样例输出
3 4 5 1 2
样例说明
第一次操作后变为 4 5 1 2 3
第二次操作后变为 3 4 5 1 2
数据规模和约定
N<=10^5,M<=10^5
#include<iostream>
using namespace std;
const int N=10e5;
int a[N],a_l[N],a_r[N];
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){a[i]=i;}while(m--){int x;cin>>x;int locate=1;for(int i=1;i<=n;i++){if(a[i]==x){locate=i;break;}}for(int i=1;i<=locate;i++){a_l[i]=a[i];}int cnt=1;for(int i=locate+1;i<=n;i++){a_r[cnt++]=a[i];}int cnt1=1,cnt2=1;for(int i=1;i<=n;i++){if(i<=n-locate){a[i]=a_r[cnt1++];}else{a[i]=a_l[cnt2++];}}}for(int i=1;i<=n;i++){cout<<a[i]<<" ";}cout<<endl;return 0;
}
思路:暴力。