#pragma GCC optimize("Ofast") #include using namespace std; int n, l, r, cntl, cntr; char op; long long x, c1[300005], c2[300005]; inline int lowbit(int x) { return x & -x; } inline void add1(int pos, long long x) { while (pos <= n) { c1[pos] += x; pos += lowbit(pos); } } inline void add2(int pos, long long x) { while (pos <= n) { c2[pos] += x; pos += lowbit(pos); } } inline long long query1(int pos) { long long ret = 0; while (pos) { ret += c1[pos]; pos -= lowbit(pos); } return ret; } inline long long query2(int pos) { long long ret = 0; while (pos) { ret += c2[pos]; pos -= lowbit(pos); } return ret; } int main() { std::ios::sync_with_stdio(false); cin >> n; for (int i = 0; i < n; i++) { cin >> op; if (op == 'I') { cin >> x; add1(++cntl, x); } else if (op == 'D') { x = query1(cntl) - query1(cntl - 1); add1(cntl--, -x); } else if (op == 'L') { if (cntl > 0) { x = query1(cntl) - query1(cntl - 1); add1(cntl--, -x); add2(++cntr, x); } } else if (op == 'R') { if (cntr > 0) { x = query2(cntr) - query2(cntr - 1); add2(cntr--, -x); add1(++cntl, x); } } else if (op == 'Q') { cin >> l >> r; if (r <= cntl) { cout << query1(r) - query1(l - 1) << endl; } else if (l > cntl) { cout << query2(cntl + cntr - l + 1) - query2(cntl + cntr - r) << endl; } else { cout << query1(cntl) - query1(l - 1) + query2(cntr) - query2(cntl + cntr - r) << endl; } } else if (op == 'C') { cin >> l >> x; if (l <= cntl) { r = query1(l) - query1(l - 1); add1(l, x - r); } else { r = query2(cntl + cntr - l + 1) - query2(cntl + cntr - l); add2(cntl + cntr - l + 1, x - r); } } } return 0; }