func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, q;   const long long MXN = 200005;   long long arr[MXN];   long long seg[MXN * 4];   void build(long long ind, long long l, long long r) {     if (l == r) {       seg[ind] = arr[l];       return;     }     long long m = (l + r) / 2;     build(ind << 1, l, m);     build((ind << 1) | 1, m + 1, r);     seg[ind] = seg[ind * 2] + seg[ind * 2 + 1];   }   void upd(long long ind, long long l, long long r, long long pos, long long to) {     if (l == r) {       seg[ind] = to;       return;     }     long long m = (l + r) / 2;     if (pos <= m)       upd(ind << 1, l, m, pos, to);     else       upd((ind << 1) | 1, m + 1, r, pos, to);     seg[ind] = seg[ind * 2] + seg[ind * 2 + 1];   }   long long qry(long long ind, long long l, long long r, long long ql,                 long long qr) {     if (ql <= l && r <= qr) {       return seg[ind];     }     if (ql > r || qr < l) {       return 0;     }     long long m = (l + r) / 2;     return qry(ind << 1, l, m, ql, qr) + qry((ind << 1) | 1, m + 1, r, ql, qr);   }   long long fact[MXN];   set<long long> rm;   long long T(long long dv) {     auto x = rm.begin();     for (long long j = 0; j < dv; j++) x++;     return *x;   }   vector<long long> wh;   void sep(long long kth) {     for (long long i = 1; i <= n; i++) {       rm.insert(i);     }     for (long long pl = n - 1; pl >= 0; pl--) {       long long dv = kth / fact[pl];       kth %= fact[pl];       long long K = T(dv);       wh.push_back(K);       rm.erase(K);     }     for (long long i = 1; i <= n; i++) {       arr[i] = wh[i - 1];     }     wh.clear();   }   long long SP = 0;   void rew(long long kth) {     if (SP == kth) return;     if (n <= 15) {       sep(kth);     } else {       for (long long i = 1; i <= 15; i++) {         rm.insert(i);       }       for (long long pl = 15 - 1; pl >= 0; pl--) {         long long dv = kth / fact[pl];         kth %= fact[pl];         long long K = T(dv);         wh.push_back(K);         rm.erase(K);       }       for (long long i = 1; i <= 15; i++) {         arr[n - 15 + i] = n - 15 + wh[i - 1];       }       wh.clear();     }     SP = kth;   }   signed main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     cout.tie(NULL);     fact[0] = 1;     cin >> n >> q;     for (long long i = 1; i <= n; i++) arr[i] = i;     for (long long i = 1; i <= 20; i++) {       fact[i] = fact[i - 1] * i;     }     long long k = 0;     build(1, 1, n);     for (long long i = 0; i < q; i++) {       long long t;       cin >> t;       if (t == 1) {         rew(k);         for (long long i = max(1ll, n - 20); i <= n; i++) {           upd(1, 1, n, i, arr[i]);         }         long long l, r;         cin >> l >> r;         cout << qry(1, 1, n, l, r) <<   n ;       } else {         long long w;         cin >> w;         k += w;       }     }   }   