问题描述
初始数组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>
#include<list>
#include<iterator>
using namespace std;
int main(){
list<int> li;//定义链表
int n,m,t;
cin>>n>>m;
for(int i=1;i<=n;i++){//创建链表
li.push_back(i);
}
list<int>::iterator it=li.begin();//定义迭代器it
for(int i=0;i<m;i++){//这里水输入而已,其实用链表只要用指针指到最后一个输入的值位置就可以了
cin>>t;
}
for(int i=0;i<n;i++){//for用来找it的位置
if(*it!=t){
it++;
}
}
for(int i=0;i<n;i++){//for用来输出从it位置开始的链表
it++;
if(it==li.end()){//实现循环链表功能
it=li.begin();
}
cout<<*it<<" ";
}
return 0;
}
总结:这道题用链表很简单。。。