func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long INF = (long long)1e18;   const int mod = (int)1e9 + 7;   const int MAXN = (int)1e5 + 5;   long long n;   const int bs = 350;   int a[MAXN];   int mp[600][MAXN];   vector<int> ls[1000];   void swp(int l, int r) {     int size = 0, i = 0;     vector<int> tmp1, tmp2;     for (i = 0; i <= (n - 1) / bs; i++) {       if (size + ls[i].size() > r) {         break;       }       size += ls[i].size();     }     long long sayi = 0;     for (int j = 0; j < ls[i].size(); j++) {       mp[i][ls[i][j]] = 0;       if (j + size == r) {         sayi = ls[i][j];         continue;       }       tmp1.push_back(ls[i][j]);     }     ls[i].clear();     for (int j : tmp1) {       ls[i].push_back(j);       mp[i][j]++;     }     size = 0;     i = 0;     for (i = 0; i <= (n - 1) / bs; i++) {       if (size + ls[i].size() > l) {         break;       }       size += ls[i].size();     }     if (l == n - 1) {       ls[(l / bs)].push_back(sayi);       mp[l / bs][sayi]++;       return;     }     for (int j = 0; j < ls[i].size(); j++) {       mp[i][ls[i][j]] = 0;       if (j + size == l) {         tmp2.push_back(sayi);       }       tmp2.push_back(ls[i][j]);     }     ls[i].clear();     for (int j : tmp2) {       ls[i].push_back(j);       mp[i][j]++;     }   }   long long get(long long ind, long long k) {     if (ind < 0) return 0;     long long ans = 0;     int size = 0;     int yer;     for (int i = 0; i <= (n - 1) / bs; i++) {       if (size + ls[i].size() > ind) {         yer = i;         break;       }       size += ls[i].size();       ans += mp[i][k];     }     for (int i = 0; i + size <= ind; i++) {       ans += (ls[yer][i] == k);     }     return ans;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     cout.tie(nullptr);     cin >> n;     for (int i = 0; i < n; i++) {       cin >> a[i];       ls[i / bs].push_back(a[i]);       mp[i / bs][a[i]]++;     }     int lastans = 0;     int q;     cin >> q;     for (int i = 0; i < q; i++) {       if (i % bs == 0) {         vector<int> tmp;         for (int i = 0; i <= (n - 1) / bs; i++) {           for (auto j = ls[i].begin(); j < ls[i].end(); j++) {             tmp.push_back(*j);             mp[i][*j] = 0;           }         }         for (int j = 0; j < n; j++) {           if (j % bs == 0) {             ls[j / bs].clear();           }           mp[j / bs][tmp[j]]++;           ls[j / bs].push_back(tmp[j]);         }       }       int a;       cin >> a;       if (a == 1) {         int l, r;         cin >> l >> r;         l = (l + lastans - 1 + n) % n;         r = (r + lastans - 1 + n) % n;         if (l > r) swap(l, r);         swp(l, r);       } else {         int l, r, k;         cin >> l >> r >> k;         l = (l + lastans - 1 + n) % n;         r = (r + lastans - 1 + n) % n;         k = 1 + (k + lastans - 1 + n) % n;         if (l > r) swap(l, r);         lastans = get(r, k) - get(l - 1, k);         cout << lastans <<   n ;       }     }   }   