OI XXV - tel

// https://szkopul.edu.pl/problemset/problem/GmAagCBetbskP0qiKlgVd-6A/site/?key=statement

#include <bits/stdc++.h>

// #define GARY_DBG
#define GARY_LIB

#define int int64_t

constexpr int sizik = 300 * 1001;

#define ar std::array

typedef std::vector<std::vector<int>> _kra;

int n, m;

namespace seg {

int d[4 * sizik];

struct Lazy {
    int a, b;
};

Lazy lazy[4 * sizik];

int cnt(int l, int r) {
    return r - l + 1;
}

void apply(int v, int tl, int tr, int a, int b) {
    int cnt1 = cnt(tl, tr);
    int val_l = a * tl + b;
    int val_r = a * tr + b;

    d[v] += (val_l + val_r) * cnt1 / 2;

    lazy[v].a += a;
    lazy[v].b += b;
}

void push(int v, int tl, int tr) {
    if (lazy[v].a == 0 && lazy[v].b == 0) return;

    int tm = (tl + tr) / 2;

    apply(2 * v, tl, tm, lazy[v].a, lazy[v].b);
    apply(2 * v + 1, tm + 1, tr, lazy[v].a, lazy[v].b);

    lazy[v] = {0, 0};
}

void update(int v, int tl, int tr, int l, int r, int a, int b) {
    if (l > r) return;
    if (tl == l && tr == r) {
        apply(v, tl, tr, a, b);
        return;
    }
    push(v, tl, tr);
    int tm = (tl + tr) / 2;
    update(2 * v, tl, tm, l, std::min(r, tm), a, b);
    update(2 * v + 1, tm + 1, tr, std::max(tm + 1, l), r, a, b);
    d[v] = d[2 * v] + d[2 * v + 1];
}

void add_progression(int l, int r, int a, int b) {
    int A = a;
    int B = b;

    update(1, 1, n, l, r, A, B);
}

int query(int v, int tl, int tr, int l, int r) {
    if (l > r) return 0;
    if (tl == l && tr == r) return d[v];
    push(v, tl, tr);
    int tm = (tl + tr) / 2;
    return query(2 * v, tl, tm, l, std::min(tm, r)) + query(2 * v + 1, tm + 1, tr, std::max(tm + 1, l), r);
}

int get_sum(int l, int r) {
    return query(1, 1, n, l, r);
}

} // namespace seg

struct Maszt {
    int s, a;
};

Maszt maszty[sizik];

void solve() {
    std::cin >> n >> m;

    for (int i = 1; i <= m; i++) {
        char c;
        std::cin >> c;

        if (c == 'P') {
            int x, s, a;
            std::cin >> x >> s >> a;

            maszty[x] = {s, a};
            int d = s / a;
            int l1 = std::max((int)1, x - d), r1 = x;
            int a1 = a, b1 = s - a * x;

            int l2 = x + 1, r2 = std::min(n, x + d);
            int a2 = -a, b2 = s + a * x;

            seg::add_progression(l1, r1, a1, b1);
            seg::add_progression(l2, r2, a2, b2);
        } else if (c == 'U') {
            int x;
            std::cin >> x;

            int s = maszty[x].s;
            int a = maszty[x].a;

            int d = s / a;
            int l1 = std::max((int)1, x - d), r1 = x;
            int a1 = -a, b1 = -(s - a * x);

            int l2 = x + 1, r2 = std::min(n, x + d);
            int a2 = a, b2 = -(s + a * x);

            seg::add_progression(l1, r1, a1, b1);
            seg::add_progression(l2, r2, a2, b2);
        } else if (c == 'Z') {
            int x1, x2;
            std::cin >> x1 >> x2;

            int ans = seg::get_sum(x1, x2);
            ans /= (x2 - x1 + 1);

            std::cout << ans << '\n';
        }
    }
}

int32_t main() {
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);

    solve();

    return 0;
}