题解:AT_past202109_j 数列の反転

· · 题解

解题思路:

对于 k1 操作,直接输出 a_k 并换行即可。

对于 k2 操作,我们可以用一个字符串储存要反转的区间,然后使用 reverse 函数反转字符串,然后将原来的区间替换成字符串即可。

CODE:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,q,a[200005];
    cin>>n>>q;
    for(int x=1;x<=2*n;x++){
        a[x]=x;//创建序列 a
    }
    for(int x=1;x<=q;x++){
        int y,z;
        cin>>y>>z;
        if(y==1) cout<<a[z]<<"\n";//操作1
        if(y==2){//操作2
            string c;
            for(int t=n-z+1;t<=n+z;t++) c+=(char)(a[t]+'0');//储存区间
            reverse(c.begin(),c.end());//反转
            for(int t=n-z+1,h=0;t<=n+z;t++) a[t]=c[h]-'0',h++;//替换区间
        }
    }
    return 0;//完结撒花~
}