记录编号 |
601017 |
评测结果 |
AAAAAAAAAA |
题目名称 |
2264.魔法传输 |
最终得分 |
100 |
用户昵称 |
OTTF |
是否通过 |
通过 |
代码语言 |
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;
}