这道题的话,首先上来读题,发现它是不能采用对每个序号采用累加的方式来判断移动多少的,因为不同序号的移动之间是会相互影响的,就像题例中的三号和八号相互影响了一样,导致三号虽然正二负二,但是并不在原来的位置上。
本题采用的是stl库中的list这个双向链表的数据结构,该数据结构的插入和删除效率高,主要是利用它的splice函数,以及advance函数.

include<bits/stdc++.h>

using namespace std;

int main(){
list lt;
int n, m, i, p, q;
cin >> n >> m;

for(i = 1; i <= n; i++){
    lt.push_back(i);
}
for(i = 0; i < m; i++){
    cin >> p >> q; 
    auto move = find(lt.begin(), lt.end(), p);
    if (move != lt.end()) {
        if(q > 0) { 
            auto target = move;
            advance(target, q);
            if(target != lt.end()) {
                lt.splice(next(target), lt, move);
            } else {
                lt.splice(lt.end(), lt, move);
            }
        } else if(q < 0) {
		
            auto target = move;
            advance(target, q);
            if(target != lt.begin()) {
                lt.splice(target, lt, move);
            } else {
                lt.splice(lt.begin(), lt, move);
            }
        }
    }
}

for (auto elem : lt) {
    cout << elem << ' ';
}
cout << '\n';

return 0;

}