记录编号 |
600233 |
评测结果 |
AAAAAAAAAAAAAAAAAAAAA |
题目名称 |
[CF 121E] 幸运数列 |
最终得分 |
100 |
用户昵称 |
LikableP |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
8.139 s |
提交时间 |
2025-04-22 20:04:37 |
内存使用 |
1.97 MiB |
显示代码纯文本
#include <cstdio>
const int MAXN = 1e5 + 10;
bool ok[10000];
int n, m;
int a[MAXN];
int tree[MAXN];
void dfs(int now) {
if (now * 10 + 4 < 10000) {
ok[now * 10 + 4] = true;
dfs(now * 10 + 4);
}
if (now * 10 + 7 < 10000) {
ok[now * 10 + 7] = true;
dfs(now * 10 + 7);
}
return ;
}
void Add(int x, int y) {
for (; x <= n; x += (x & -x)) tree[x] += y;
}
int Get(int x) {
int res = 0;
for (; x; x -= (x & -x)) res += tree[x];
return res;
}
int main() {
freopen("cf121e.in", "r", stdin);
freopen("cf121e.out", "w", stdout);
dfs(0);
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
if (ok[a[i]]) Add(i, 1);
}
while (m--) {
char op[10]; int l, r, d;
scanf("%s %d %d", op, &l, &r);
if (op[0] == 'a') {
scanf("%d", &d);
for (int i = l; i <= r; ++i) {
if (ok[a[i]]) Add(i, -1);
a[i] += d;
if (ok[a[i]]) Add(i, 1);
}
} else {
printf("%d\n", Get(r) - Get(l - 1));
}
}
return 0;
}