#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define MOD 1000000007 #define MOD2 998244353 #define int long long #define EPS 1e-9 //#define PI 3.14159265358979 #define rep(i, n) for (int i = 0; i < (int)(n); i++) using namespace std; template < typename T > ostream &operator<<(ostream &os, const vector< T > &A) { for (int i = 0; i < A.size(); i++) os << A[i] << " "; os << endl; return os; } template <> ostream &operator<<(ostream &os, const vector< vector< int > > &A) { int N = A.size(); int M; if (N > 0) M = A[0].size(); for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) os << A[i][j] << " "; os << endl; } return os; } typedef pair< int, int > pii; typedef long long ll; struct edge { int from, to, d, c; edge(int _from = 0, int _to = 0, int _d = 0, int _c = 0) { from = _from; to = _to; d = _d; c = _c; } bool operator<(const edge &rhs) const { return (d == rhs.d) ? (c < rhs.c) : (d < rhs.d); } }; struct aabb { int x1, y1, x2, y2; aabb(int x1, int y1, int x2, int y2) : x1(x1), y1(y1), x2(x2), y2(y2) {} }; typedef vector< edge > edges; typedef vector< edges > graph; struct flow { int to, cap, rev, cost; flow(int to = 0, int cap = 0, int rev = 0, int cost = 0) : to(to), cap(cap), rev(rev), cost(cost) {} }; typedef vector< vector< flow > > flows; const int di[4] = {0, -1, 0, 1}; const int dj[4] = {-1, 0, 1, 0}; const int ci[5] = {0, 0, -1, 0, 1}; const int cj[5] = {0, -1, 0, 1, 0}; const ll LINF = LLONG_MAX / 2; const int INF = INT_MAX / 2; const double PI = acos(-1); int pow2(int n) { return 1LL << n; } template < typename T, typename U > bool chmin(T &x, const U &y) { if (x > y) { x = y; return true; } return false; } template < typename T, typename U > bool chmax(T &x, const U &y) { if (x < y) { x = y; return true; } return false; } struct initializer { initializer() { cout << fixed << setprecision(20); } }; initializer _____; struct LSegT { int N; vector< int > node, lazy; LSegT(vector< int > &A) { int sz = A.size(); N = 1; while (N < sz) N *= 2; node.resize(2 * N - 1); lazy.resize(2 * N - 1, 0); rep(i, sz) node[i + N - 1] = A[i]; for (int i = N - 2; i >= 0; i--) node[i] = node[i * 2 + 1] + node[i * 2 + 2]; } void eval(int k, int l, int r) { if (lazy[k] != 0) { node[k] += lazy[k]; if (r - l > 1) { lazy[2 * k + 1] += lazy[k] / 2; lazy[2 * k + 2] += lazy[k] / 2; } lazy[k] = 0; } } void add(int a, int b, int x, int k = 0, int l = 0, int r = -1) { if (r < 0) r = N; eval(k, l, r); if (b <= l || r <= a) return; if (a <= l && r <= b) { lazy[k] += (r - l) * x; eval(k, l, r); } else { add(a, b, x, 2 * k + 1, l, (l + r) / 2); add(a, b, x, 2 * k + 2, (l + r) / 2, r); node[k] = node[2 * k + 1] + node[2 * k + 2]; } } int sum(int a, int b, int k = 0, int l = 0, int r = -1) { if (r < 0) r = N; if (b <= l || r <= a) return 0; eval(k, l, r); if (a <= l && r <= b) return node[k]; int vl = sum(a, b, 2 * k + 1, l, (l + r) / 2); int vr = sum(a, b, 2 * k + 2, (l + r) / 2, r); return vl + vr; } }; int N, M, K, T, Q, H, W; signed main() { cin >> N >> Q; vector< int > A(N); rep(i, N) cin >> A[i]; vector< int > B(N, 0); vector< int > C(N, 0); LSegT lst(C); vector< pair< char, pii > > Query(Q); rep(i, Q) { cin >> Query[i].first >> Query[i].second.first >> Query[i].second.second; Query[i].second.first--; if (Query[i].first == 'B') Query[i].second.second--; } rep(i, Q) { if (Query[i].first == 'A') continue; lst.add(Query[i].second.first, Query[i].second.second + 1, 1); } rep(i, N) { B[i] += A[i] * lst.sum(i, i + 1); } rep(i, Q) { int x = Query[i].second.first, y = Query[i].second.second; if (Query[i].first == 'A') { B[x] += y * lst.sum(x, x + 1); } else { lst.add(x, y + 1, -1); } } rep(i, N) cout << B[i] << " "; cout << endl; return 0; }