直接暴力做所有操作即可

实测即使区间全卡满也只跑不到三秒,对于测试用例跑的比自己写的分块还要快

upd: 不到三秒是错的,因为操作二开销要比操作一更大,会超过三秒。不过全操作二仍然不到四秒,还是稳稳通过。

#include <iostream>
using namespace std;

using ll = long long;

int n;
int q;
ll a[100001];

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    while (q--) {
        int op, l, r, x;
        cin >> op >> l >> r >> x;
        if (op == 1) {
            for (int i = l; i <= r; i++) {
                a[i] += x;
            }
            continue;
        }
        int res = 0;
        for (int i = l; i <= r; i++) {
            if (a[i] < x) {
                res++;
            }
        }
        cout << res << '\n';
    }
}
// 64 位输出请用 printf("%lld")