// kmjpさんのコード参考 #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int MAXN = 40040; template class BIT { public: V bit[1< Lbit; BIT Rbit; int N, N2, Q; char X[30000]; int Y[30000], Z[30000]; int momo(int a) {return (a%N2+N2)%N2;} void solve() { cin >> N >> Q; N2 = 2*N; for (int i = 0; i < Q; i++) { cin >> X[i] >> Y[i] >> Z[i]; if (X[i] == 'L') { Lbit.update(1+momo(Y[i]+i+1), Z[i]); } if (X[i] == 'R') { Rbit.update(1+momo(Y[i]-(i+1)), Z[i]); } if (X[i] == 'C') { Z[i]--; ll ret = 0; { int x = momo(Y[i]+(i+1)); int y = momo(Z[i]+(i+1)); if (x <= y) ret += Lbit.total(y+1)-Lbit.total(x); else ret += Lbit.total(N2+2)-Lbit.total(x)+Lbit.total(y+1); } { int x = momo(N2-1-Z[i]+(i+1)); int y = momo(N2-1-Y[i]+(i+1)); if (x <= y) ret += Lbit.total(y+1)-Lbit.total(x); else ret += Lbit.total(N2+2)-Lbit.total(x)+Lbit.total(y+1); } { int x = momo(Y[i]-(i+1)); int y = momo(Z[i]-(i+1)); if (x <= y) ret += Rbit.total(y+1)-Rbit.total(x); else ret += Rbit.total(N2+2)-Rbit.total(x)+Rbit.total(y+1); } { int x = momo(N2-1-Z[i]-(i+1)); int y = momo(N2-1-Y[i]-(i+1)); if (x <= y) ret += Rbit.total(y+1)-Rbit.total(x); else ret += Rbit.total(N2+2)-Rbit.total(x)+Rbit.total(y+1); } cout << ret << endl; } } } int main() { solve(); }