资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
初始数组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;
int main(){
int n,m;
cin>>n>>m;
int a[n+1];
for(int i=1;i<=n;i++){
a[i]=i;
}
int b[n+1];
for(int i=0;i<m;i++){
int bi;
cin>>bi;
for(int j=n;j>=1;j--){
if(a[j]==bi){
int q=1;
for(int k=j+1;k<=n;k++){
b[q]=a[k];
q++;
}
for(int l=1;l<=j;l++){
b[q]=a[l];
q++;
}
for(int u=1;u<=n;u++){
a[u]=b[u];
}
break;
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}