记录编号 601017 评测结果 AAAAAAAAAA
题目名称 2264.魔法传输 最终得分 100
用户昵称 GravatarOTTF 是否通过 通过
代码语言 C++ 运行时间 0.775 s
提交时间 2025-05-24 14:35:50 内存使用 4.31 MiB
显示代码纯文本

#include <cstdio>
#include <iostream>

using namespace std;

const int Mod = 1e9 + 7;
const int Len = 114514;

int n;
int m;
long long one[Len];
long long two[Len];

int lowbit (int id) {
    return id & (-id);
}

void add (int id, int x) {
    for (long long y = 1ll * id * x % Mod; id <= n; id += lowbit (id)) {
        one[id] += x + Mod;
        one[id] %= Mod;
        two[id] += y + Mod;
        two[id] %= Mod;
    }
}

void add (int l, int r, int x) {
    add (l, x);
    add (r + 1, -x);
}

long long query (int id, long long *t) {
    long long res = 0;
    for (; id; id -= lowbit (id)) {
        res += t[id];
        res %= Mod;
    }
    return res;
}

long long query (int l, int r) {
    long long a = ((r + 1ll) * query (r, one) % Mod - l * 1ll * query (l - 1, one) % Mod + Mod) % Mod;
    long long b = (query (r, two) - query (l - 1, two) + Mod) % Mod;
    return (a - b + Mod) % Mod;
}

void ParseIn () {

    freopen ("magics.in", "r", stdin);
    freopen ("magics.out", "w", stdout);
    
    cin >> n >> m;

}

void CoreCWriteOut () {

    char opt;
    int l, r;
    for (int i = 1; i <= m; i++) {
        cin >> opt >> l;
        if (opt == 'C') {
            cin >> r;
            add (l, r, 1);
            add (r + 1, r + 1, -(r - l + 1));
        }
        else {
            cout << query (1, l) << endl;
        }
    }

}

int main () {

    ParseIn ();
    CoreCWriteOut ();

    return 0;
}