mickypinata

PROG-T1072: Number

Jun 15th, 2021
595
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int N = 5e5;
  5.  
  6. int arr[N];
  7. int nNumber, shift, currRev;
  8.  
  9. int shiftIdx(int idx){
  10.     return (nNumber + idx + shift) % nNumber;
  11. }
  12.  
  13. int &arrIdx(int idx){
  14.     if(currRev == -1){
  15.         return arr[shiftIdx(idx)];
  16.     }
  17.     if(idx <= currRev){
  18.         return arr[shiftIdx(currRev - idx)];
  19.     } else {
  20.         return arr[shiftIdx(nNumber + currRev - idx)];
  21.     }
  22. }
  23.  
  24. int main(){
  25.  
  26.     int Q;
  27.     scanf("%d%d", &nNumber, &Q);
  28.     for(int i = 0; i < nNumber; ++i){
  29.         scanf("%d", &arr[i]);
  30.     }
  31.     shift = 0;
  32.     currRev = -1;
  33.     for(int q = 1; q <= Q; ++q){
  34.         char cmd;
  35.         int idx, x;
  36.         scanf(" %c%d", &cmd, &idx);
  37.         --idx;
  38.         if(cmd == 'a'){ // Swap
  39.             scanf("%d", &x);
  40.             --x;
  41.             swap(arrIdx(idx), arrIdx(x));
  42.         } else if(cmd == 'b'){ // Assign
  43.             scanf("%d", &x);
  44.             arrIdx(idx) = x;
  45.         } else if(cmd == 'c'){ // Reverse
  46.             if(currRev == -1){
  47.                 currRev = idx;
  48.             } else {
  49.                 shift = (shift + currRev - idx) % nNumber;
  50.                 currRev = -1;
  51.             }
  52.         } else if(cmd == 'q'){ // Print
  53.             cout << arrIdx(idx) << '\n';
  54.         }
  55.     }
  56.  
  57.     return 0;
  58. }
  59.  
RAW Paste Data