#include <bits/stdc++.h>
using namespace std;
int a[100005], seg[400005], n, m;
void update(int i, int l, int r, int ql, int qr, int x)
{
    if (ql<=l && r<=qr)
    {
        seg[i]+=x;
        return;
    }
    int mid=(l+r)/2;
    if (l<=qr && ql<=mid)
        update(i*2, l, mid, ql, qr, x);
    if (mid<qr && ql<=r)
        update(i*2+1, mid+1, r, ql, qr, x);
}
int query(int i, int l, int r, int x)
{
    if (l==r)
        return seg[i];
    int mid=(l+r)/2;
    return seg[i]+(x<=mid?query(i*2, l, mid, x):query(i*2+1, mid+1, r, x));
}
int lowerBound(int x)
{
    int l=1, r=n+1;
    while (l<r)
    {
        int mid=(l+r)/2;
        if (query(1, 1, n, mid)<x)
            l=mid+1;
        else
            r=mid;
    }
    return l;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for (int i=1; i<=n; i++)
        cin >> a[i];
    sort(a+1, a+n+1);
    for (int i=1; i<=n; i++)
        update(1, 1, n, i, i, a[i]);
    for (int i=1; i<=m; i++)
    {
        char x;
        cin >> x;
        if (x=='F')
        {
            int c, h;
            cin >> c >> h;
            int ind=lowerBound(h);
            if (ind>n)
                continue;
            if (ind+c>n)
            {
                update(1, 1, n, ind, n, 1);
                continue;
            }
            int val=query(1, 1, n, ind+c-1);
            int ind2=lowerBound(val), ind3=lowerBound(val+1);
            if (ind<ind2)
                update(1, 1, n, ind, ind2-1, 1);
            update(1, 1, n, ind3-(ind+c-ind2), ind3-1, 1);
        }
        else
        {
            int l, r;
            cin >> l >> r;
            cout << lowerBound(r+1)-lowerBound(l) << '\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... |