#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; using Pll = pair; using Pii = pair; constexpr int INF = 1 << 30; constexpr ll LINF = 1LL << 60; constexpr ll MOD = 1000000007; constexpr long double EPS = 1e-10; constexpr int dyx[4][2] = { { 0, 1}, {-1, 0}, {0,-1}, {1, 0} }; template class SegmentTree { public: typedef function F; size_t n; vector data; T def; // 単位元 T initial_value; // 初期値 F update_func; // 更新用関数 F find_func; //クエリ用関数 SegmentTree(size_t _n, T def, T initial_value, F update_func, F find_func) : def(def), initial_value(initial_value), update_func(update_func), find_func(find_func) { n = 1; while(n < _n) n <<= 1; data = vector(2*n-1, initial_value); } void update(size_t i, T x) { i += n-1; data[i] = update_func(data[i], x); while(i) { i = (i-1) / 2; data[i] = find_func(data[2*i+1], data[2*i+2]); } } T find(size_t s, size_t t, size_t k, size_t kl, size_t kr) { if(kr <= s || t <= kl) return initial_value; if(s <= kl && kr <= t) return data[k]; size_t kc = (kl+kr) / 2; T vl = find(s, t, 2*k+1, kl, kc); T vr = find(s, t, 2*k+2, kc, kr); return find_func(vl, vr); } T find(size_t s, size_t t) { return find(s, t, 0, 0, n); } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, q; cin >> n >> q; vector a(n); for(int i=0;i> a[i]; } vector> query(n+1, vector(3, 0)); char c; vector b(n, 0); { vector qb_cnt(n, 0); for(int i=1;i<=q;++i) { cin >> c; cin >> query[i][1] >> query[i][2]; if(c == 'B') { query[i][0] = 1; --query[i][1]; --query[i][2]; ++qb_cnt[query[i][1]]; if(query[i][2] != n-1) --qb_cnt[query[i][2]+1]; } else { --query[i][1]; } } for(int i=1;i tree( n+1, 0LL, 0LL, [](unsigned int a, unsigned int b) { return a+b; }, [](unsigned int a, unsigned int b) { return a+b; } ); for(int i=q;i>=1;--i) { if(query[i][0] == 0) { ll cnt = tree.find(0, query[i][1]); b[query[i][1]] += cnt * query[i][2]; } else { tree.update(query[i][1], 1); tree.update(query[i][2], -1); } } } cout << b[0]; for(int i=1;i