比赛 |
树形数据结构进阶(再进阶) |
评测结果 |
EEEEEEEEEEEEEEEEEEEEE |
题目名称 |
幸运数列 |
最终得分 |
0 |
用户昵称 |
长安惊龙灵松 |
运行时间 |
4.392 s |
代码语言 |
C++ |
内存使用 |
3.18 MiB |
提交时间 |
2025-04-19 10:42:59 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,a[N],f[10005],l,r,d,c[N];
string s;
int num(int n)
{
if(n*10+7<=10000)
{
f[n*10+7]=1;
num(n*10+7);
}
if(n*10+4<=10000)
{
f[n*10+4]=1;
num(n*10+4);
}
}
int lowbit(int i)
{
return i&(-i);
}
void add(int a,int b)
{
for (;a<=n;a+=lowbit(a))
{
c[a]+=b;
}
}
int sum(int x)
{
int s=0;
for(;x>0;x-=lowbit(x))
{
s+=c[x];
}
return s;
}
int main()
{
freopen("cf121e.in","r",stdin);
freopen("cf121e.out","w",stdout);
scanf("%d%d",&n,&m);
num(0);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(f[a[i]])
{
add(i,1);
}
}
for(int i=1;i<=m;i++)
{
cin>>s;
if(s=="add")
{
scanf("%d%d%d",&l,&r,&d);
for(int i=l;i<=r;i++)
{
if(f[a[i]]) add(i,-1);
a[i]+=d;
if(f[a[i]]) add(i,1);
}
}
else
{
scanf("%d%d",&l,&r);
printf("%d\n",sum(r)-sum(l-1));
}
}
return 0;
}