// 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;
}