思路:简单模拟;list为双向循环链表,插入删除时间复杂度为O(1)
#include <bits/stdc++.h>
using namespace std;
list<int>l;//存储学号的链表
int main() {
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)l.push_back(i);
while(m--){
int p,q;cin>>p>>q;
list<int>::iterator i=l.begin();
while(*i!=p)++i;//指针移动到编号为p的元素处
i=l.erase(i);//删去并返回指针
while(q<0){//移动指针
--i;++q;
}
while(q>0){
++i;--q;
}
l.insert(i,p);//插入
}
for(list<int>::iterator i=l.begin();i!=l.end();++i)
cout<<*i<<' ';
return 0;
}