#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
long long ST[4 * N + 5];
int n, Q;
// Truy vấn: A(i) = v
// Hàm cập nhật trên cây ST, cập nhật cây con gốc id quản lý đọan [l, r]
void update(int id, int l, int r, int i, int v) {
if (i < l || r < i) {
// i nằm ngoài đoạn [l, r], ta bỏ qua nút i
return ;
}
if (l == r) {
// Đoạn chỉ gồm 1 phần tử, không có nút con
ST[id] = v;
return ;
}
// Gọi đệ quy để xử lý các nút con của nút id
int mid = (l + r) / 2;
update(id*2, l, mid, i, v);
update(id*2 + 1, mid+1, r, i, v);
// Cập nhật lại giá trị Sum của đoạn [l, r] theo 2 nút con:
ST[id] = (ST[id*2] + ST[id*2 + 1]);
}
// Truy vấn: tìm max đoạn [u, v]
// Hàm tìm max các phần tử trên cây ST nằm trong cây con gốc id - quản lý đoạn [l, r]
long long get(int id, int l, int r, int u, int v) {
if (v < l || r < u) {
// Đoạn [u, v] không giao với đoạn [l, r], ta bỏ qua đoạn này
return 0;
}
if (u <= l && r <= v) {
// Đoạn [l, r] nằm hoàn toàn trong đoạn [u, v] mà ta đang truy vấn, ta trả lại
// thông tin lưu ở nút id
return ST[id];
}
int mid = (l + r) / 2;
// Gọi đệ quy với các con của nút id
return (get(id*2, l, mid, u, v) + get(id*2 + 1, mid+1, r, u, v));
}
int main() {
cin >> n >> Q;
while (Q -- ) {
char c;
cin >> c;
if (c == 'S') {
int i, v;
cin >> i >> v;
update(1, 1, n, i, v);
}
else {
int l, r;
cin >> l >> r;
cout << get(1, 1, n, l, r) << endl;
}
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBOID0gMWU1ICsgNTsKCmxvbmcgbG9uZyBTVFs0ICogTiArIDVdOwppbnQgbiwgUTsKCi8vIFRydXkgduG6pW46IEEoaSkgPSB2Ci8vIEjDoG0gY+G6rXAgbmjhuq10IHRyw6puIGPDonkgU1QsIGPhuq1wIG5o4bqtdCBjw6J5IGNvbiBn4buRYyBpZCBxdeG6o24gbMO9IMSR4buNYW4gW2wsIHJdCnZvaWQgdXBkYXRlKGludCBpZCwgaW50IGwsIGludCByLCBpbnQgaSwgaW50IHYpIHsKICAgIGlmIChpIDwgbCB8fCByIDwgaSkgewogICAgICAgIC8vIGkgbuG6sW0gbmdvw6BpIMSRb+G6oW4gW2wsIHJdLCB0YSBi4buPIHF1YSBuw7p0IGkKICAgICAgICByZXR1cm4gOwogICAgfQogICAgaWYgKGwgPT0gcikgewogICAgICAgIC8vIMSQb+G6oW4gY2jhu4kgZ+G7k20gMSBwaOG6p24gdOG7rSwga2jDtG5nIGPDsyBuw7p0IGNvbgogICAgICAgIFNUW2lkXSA9IHY7CiAgICAgICAgcmV0dXJuIDsKICAgIH0KCiAgICAvLyBH4buNaSDEkeG7hyBxdXkgxJHhu4MgeOG7rSBsw70gY8OhYyBuw7p0IGNvbiBj4bunYSBuw7p0IGlkCiAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICB1cGRhdGUoaWQqMiwgbCwgbWlkLCBpLCB2KTsKICAgIHVwZGF0ZShpZCoyICsgMSwgbWlkKzEsIHIsIGksIHYpOwoKICAgIC8vIEPhuq1wIG5o4bqtdCBs4bqhaSBnacOhIHRy4buLIFN1bSBj4bunYSDEkW/huqFuIFtsLCByXSB0aGVvIDIgbsO6dCBjb246CgogICAgU1RbaWRdID0gKFNUW2lkKjJdICsgU1RbaWQqMiArIDFdKTsKfQoKLy8gVHJ1eSB24bqlbjogdMOsbSBtYXggxJFv4bqhbiBbdSwgdl0KLy8gSMOgbSB0w6xtIG1heCBjw6FjIHBo4bqnbiB04butIHRyw6puIGPDonkgU1QgbuG6sW0gdHJvbmcgY8OieSBjb24gZ+G7kWMgaWQgLSBxdeG6o24gbMO9IMSRb+G6oW4gW2wsIHJdCgpsb25nIGxvbmcgZ2V0KGludCBpZCwgaW50IGwsIGludCByLCBpbnQgdSwgaW50IHYpIHsKICAgIGlmICh2IDwgbCB8fCByIDwgdSkgewogICAgICAgIC8vIMSQb+G6oW4gW3UsIHZdIGtow7RuZyBnaWFvIHbhu5tpIMSRb+G6oW4gW2wsIHJdLCB0YSBi4buPIHF1YSDEkW/huqFuIG7DoHkKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmICh1IDw9IGwgJiYgciA8PSB2KSB7CiAgICAgICAgLy8gxJBv4bqhbiBbbCwgcl0gbuG6sW0gaG/DoG4gdG/DoG4gdHJvbmcgxJFv4bqhbiBbdSwgdl0gbcOgIHRhIMSRYW5nIHRydXkgduG6pW4sIHRhIHRy4bqjIGzhuqFpCiAgICAgICAgLy8gdGjDtG5nIHRpbiBsxrB1IOG7nyBuw7p0IGlkCiAgICAgICAgcmV0dXJuIFNUW2lkXTsKICAgIH0KICAgIGludCBtaWQgPSAobCArIHIpIC8gMjsKICAgIC8vIEfhu41pIMSR4buHIHF1eSB24bubaSBjw6FjIGNvbiBj4bunYSBuw7p0IGlkCiAgICByZXR1cm4gKGdldChpZCoyLCBsLCBtaWQsIHUsIHYpICsgZ2V0KGlkKjIgKyAxLCBtaWQrMSwgciwgdSwgdikpOwp9CgppbnQgbWFpbigpIHsKCiAgICBjaW4gPj4gbiA+PiBROwogICAgd2hpbGUgKFEgLS0gKSB7CiAgICAgICAgY2hhciBjOwogICAgICAgIGNpbiA+PiBjOwoKICAgICAgICBpZiAoYyA9PSAnUycpIHsKICAgICAgICAgICAgaW50IGksIHY7CiAgICAgICAgICAgIGNpbiA+PiBpID4+IHY7CiAgICAgICAgICAgIHVwZGF0ZSgxLCAxLCBuLCBpLCB2KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBsLCByOwogICAgICAgICAgICBjaW4gPj4gbCA+PiByOwogICAgICAgICAgICBjb3V0IDw8IGdldCgxLCAxLCBuLCBsLCByKSA8PCBlbmRsOwogICAgICAgIH0KCiAgICB9Cn0K