#include <bits/stdc++.h>
using namespace std;
using ll = long long;
char cmd;
int n, m, a, b;
vector<int> vec;
ll segmn[800005], segmx[800005], laz[800005];
void push(int idx, int len) {
    segmn[idx]+= laz[idx];
    segmx[idx] += laz[idx];
    if(len > 1) {
        laz[idx*2+1] += laz[idx];
        laz[idx*2+2] += laz[idx];
    }
    laz[idx] = 0;
}
void upd(int idx, int l, int r, int tl, int tr, ll val) {
    push(idx, r-l+1);
    if(tr < l || r < tl) return;
    if(tl <= l && r <= tr) {
        laz[idx] = val;
        push(idx, r-l+1);
        return ;
    }
    int mid = (l+r) >> 1;
    upd(idx*2+1, l, mid, tl, tr, val);
    upd(idx*2+2, mid+1, r, tl, tr, val);
    segmn[idx] = min(segmn[idx*2+1], segmn[idx*2+2]);
    segmx[idx] = max(segmx[idx*2+1], segmx[idx*2+2]);
}
int qr(int idx, int l, int r, int tgt) { //returns lower_bound on segm
    push(idx, r-l+1);
    if(l == r) return l;
    int mid = (l + r) >> 1;
    if(tgt <= segmx[idx*2+1]) return qr(idx*2+1, l, mid, tgt);
    else return qr(idx*2+2, mid+1, r, tgt);
}
int gn(int idx, int l, int r, int tgt) {
    push(idx, r-l+1);
    if(l == r) return segmn[idx];
    int mid = (l+r) >> 1;
    if(tgt <= mid) return gn(idx*2+1, l, mid, tgt);
    else return gn(idx*2+2, mid+1, r, tgt);
}
int main() {
    cin.tie(0) -> sync_with_stdio(0);
    cin >> n >> m;
    vec.resize(n);
    for(int &e:vec) cin >> e;
    sort(vec.begin(), vec.end());
    for(int i=0;i<n;i++) {
        upd(0, 1, n+1, i+1, i+1, vec[i]);
    }
    upd(0, 1, n+1, n+1, n+1, 1.5e9);
    while(m--) {
        cin >> cmd >> a >> b;
        if(cmd == 'F') {
            swap(a, b);
            int fst = qr(0, 1, n+1, a);
            if(fst > n) continue;
            if(fst + b -1 >= n) {
                upd(0, 1, n+1, fst, n, 1);
                continue;
            }
            int gtfo = gn(0, 1, n+1, fst + b - 1);
            int fsofgtfo = qr(0, 1, n+1, gtfo);
            int len = fst+b-fsofgtfo;
            int lsofgtfo = qr(0, 1, n+1, gtfo+1) - 1;
            upd(0, 1, n+1, fst, fsofgtfo-1, 1);
            upd(0, 1, n+1, lsofgtfo-len+1, lsofgtfo, 1);
        } else {
            cout << qr(0, 1, n+1, b+1) - qr(0, 1, n+1, a) << '\n';
        }
        //for(int i=1;i<=n;i++) cout << gn(0, 1, n+1, i) << ' '; cout << '\n';
    }
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |