比赛 2025.5.24 评测结果 AAAAAAAAAA
题目名称 魔法传输 最终得分 100
用户昵称 健康铀 运行时间 0.251 s
代码语言 C++ 内存使用 4.13 MiB
提交时间 2025-05-24 11:50:03
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;

const int MOD = 1e9+7;

class BIT {
private:
    vector<long long> tr;
    int n;

public:
    BIT(int sz) {
        n = sz + 2;
        tr.resize(n, 0);
    }

    void upd(int i, int v) {
        v %= MOD;
        if (v < 0) v += MOD;
        for (; i < n; i += i & -i) 
            tr[i] = (tr[i] + v) % MOD;
    }

    long long qry(int i) {
        long long res = 0;
        for (; i > 0; i -= i & -i) 
            res = (res + tr[i]) % MOD;
        return res;
    }
};

int main() {
	freopen("magics.in","r",stdin);
	freopen("magics.out","w",stdout);
    int N, M;
    scanf("%d%d", &N, &M);
    BIT A(N), B(N);
    char op[2];
    while (M--) {
        scanf("%s", op);
        if (op[0] == 'C') {
            int L, R;
            scanf("%d%d", &L, &R);
            A.upd(L, 1);
            A.upd(R+1, -1);
            int K = (-L + 1);
            B.upd(L, K);
            B.upd(R+1, -K);
        } else {
            int x;
            scanf("%d", &x);
            long long sa = A.qry(x);
            long long sb = B.qry(x);
            long long ans = (sa * x % MOD + sb) % MOD;
            printf("%lld\n", (ans + MOD) % MOD);
        }
    }
    return 0;
}