B 子串翻转
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+10; 4 deque<char>S; 5 char s[N]; 6 int n,m,q; 7 int flag; 8 int l; 9 int main() 10 { 11 scanf("%d%d%d",&n,&m,&q); 12 scanf("%s",s); 13 for(int i=0;i<m;++i) S.push_back(s[i]); 14 for(int i=1;i<=q;++i) 15 { 16 int ty,pos; 17 scanf("%d%d",&ty,&pos); 18 if(ty==1){ 19 while(l<pos-1){ 20 if(flag){ 21 s[l]=S[m-1]; 22 S.pop_back(); 23 S.push_front(s[l+m]); 24 } 25 else{ 26 s[l]=S[0]; 27 S.pop_front(); 28 S.push_back(s[l+m]); 29 } 30 ++l; 31 } 32 flag^=1; 33 } 34 else{ 35 if(pos-1<l||pos-1>=l+m) printf("%c",s[pos-1]); 36 else{ 37 if(flag) printf("%c",S[m-pos+l]); 38 else printf("%c",S[pos-l-1]); 39 } 40 } 41 } 42 }