记录编号 600194 评测结果 AAAAAAAAAAAAAAAAAAAAA
题目名称 [CF 121E] 幸运数列 最终得分 100
用户昵称 Gravatar长安惊龙灵松 是否通过 通过
代码语言 C++ 运行时间 9.057 s
提交时间 2025-04-19 16:05:37 内存使用 4.01 MiB
显示代码纯文本
#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;
void 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;
}