Lucky Array

题目大意

维护一个序列,支持以下操作:

  • 区间加一个大于 \(0\) 的数。

  • 区间查询有多少个数位上只包含 \(4\) 或 \(7\) 的数。

思路分析

看起来很不可做,但考虑到题目给了一个特殊性质:

保证所有数操作前后都不超过 \(10^4\)

那么如果暴力进行区间加,最坏情况会加 \(10^9\) 次,考虑到 \(4\text{s}\) 的时限,复杂度是正确的。

区间查询的话,容易发现 \(10^4\) 范围内满足条件的数只有 \(30\) 个,打一个表出来就行了。

再随便套一个数据结构用来求和就可以了。

时间复杂度为 \(O(nV+f(n))\),其中 \(f(n)\) 为用于求和的数据结构的时间复杂度。

代码

线段树被不知道为什么卡常了,因此这里写的是分块。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm> using namespace std;
const int N=100100;
#define mid ((l+r)>>1) int num[]={4,7,44,47,77,74,444,447,477,474,744,747,774,777,4444,4447,4474,4477,4744,4747,4774,4777,7444,7447,7474,7477,7744,7747,7774,7777};
//表不要打错了
int n,m,in1,in2,in3,B;
int vis[N],inp[N],sum[N],pos[N],L[N],R[N]; char op[7]; int ask(int l,int r){
int res=0;
if(pos[l]==pos[r]){for(int i=in1;i<=in2;i++) res+=vis[inp[i]];return res;}
for(int i=in1;i<=R[pos[in1]];i++) res+=vis[inp[i]];
for(int i=pos[in1]+1;i<=pos[in2]-1;i++) res+=sum[i];
for(int i=L[pos[in2]];i<=in2;i++) res+=vis[inp[i]];
return res;
} int main(){
memset(L,0x3f,sizeof L);
for(int i=0;i<30;i++) vis[num[i]]=1;
scanf("%d%d",&n,&m);
B=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&inp[i]);
pos[i]=i/B+1;
sum[pos[i]]+=vis[inp[i]];
L[pos[i]]=min(L[pos[i]],i);
R[pos[i]]=max(R[pos[i]],i);
}
while(m--){
scanf("%s",op+1);
if(op[1]=='a'){
scanf("%d%d%d",&in1,&in2,&in3);
for(int i=in1;i<=in2;i++){
sum[pos[i]]-=vis[inp[i]];
inp[i]+=in3;
sum[pos[i]]+=vis[inp[i]];
//对于每个数暴力加
}
}
if(op[1]=='c'){
scanf("%d%d",&in1,&in2);
cout<<ask(in1,in2)<<'\n';//区间查询
}
}
return 0;
}

Lucky Array 题解的更多相关文章

  1. Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array

    E. Lucky Array Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers w ...

  2. Codeforces Beta Round #91 (Div. 1 Only) E. Lucky Array 分块

    E. Lucky Array time limit per test 4 seconds memory limit per test 256 megabytes input standard inpu ...

  3. CodeForces 122G Lucky Array(一脸懵逼的树状数组)

    Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal re ...

  4. codeforces 121 E. Lucky Array

    time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...

  5. CF 121E Lucky Array 【树状数组】

    这个题目的数据感觉不能更水了.从复杂度上计算,肯定有极限数据可以卡掉暴力方法的么. 总之,暴力的做法就是树状数组了,对于区间更新,就挨个更新就是了.当然,判断是否是Lucky Number的话,可以用 ...

  6. CF121E Lucky Array

    题解: 这个题好像暴力+线段树就能过 就是对修改操作暴力,线段树维护查询 为啥呢 因为保证了数$<=1e4$,于是这样复杂度$n*1e4=1e9$ 那么特殊数只有30个 又因为操作是只加不减的, ...

  7. Lucky Array CodeForces - 121E (线段树,好题)

    题目链接 题目大意: 定义只含数字$4,7$的数字为幸运数, 给定序列, 区间加正数, 区间询问多少个幸运数 题解: 对于每一个数, 求出它和第一个比它大的幸运数之差, 则问题转化为区间加,查询$0$ ...

  8. [LeetCode]Remove Duplicates from Sorted Array题解

    Remove Duplicates from Sorted Array: Given a sorted array, remove the duplicates in place such that ...

  9. Leetcode Find Minimum in Rotated Sorted Array 题解

    Leetcode Find Minimum in Rotated Sorted Array 题目大意: 对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数.注意,K有 ...

  10. LuoguP7059 [NWRRC2015]Lucky Chances 题解

    Content 有一个名叫 Lucky chances 的游戏,游戏一开始给出一个 \(r\times c\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...

随机推荐

  1. Health Kit 新版本功能解析,给你丰富运动体验!

    华为运动健康服务(HUAWEI Health Kit)6.11.0版本新鲜出炉! 开放活力三环数据助力养成运动习惯,新增水肺潜水.户外探险数据开放-- 丰富运动体验,尽在Health Kit,一起来看 ...

  2. DevChat:将 GPT-4 无缝融入 VS Code,极致提升你的编程体验

    目录 一.絮絮叨叨 1.1 缘起 1.2 嫌弃 1.3 征服 二.认真聊聊 2.1 老板给了少年一个任务 2.2 少年祭出了 DevChat 2.3 让 DevChat 帮着选 web 框架 2.4 ...

  3. 选择排序与冒泡排序(c语言+Java语言)

    选择排序 O(n2) 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 重复第二步,直到所有元素均排序完毕. 例 ...

  4. 音视频开发进阶|第四讲:音频自动增益控制 AGC

    在之前的文章中,我们已经接触了两个重要的音频前处理模块 – 回声消除 AEC 和噪声抑制 ANS,它们分别解决了 RTC 场景下的回声.噪声问题,极大提升了用户的体验.至此,音频前处理三剑客中,就只剩 ...

  5. PTA 21级数据结构与算法实验8—排序

    目录 7-1 统计工龄 7-2 寻找大富翁 7-3 点赞狂魔 7-4 插入排序还是归并排序 7-5 插入排序还是堆排序 7-6 逆序对 7-7 堆排序 7-8 石子合并 7-9 第k小 7-10 快速 ...

  6. SketchUp Pro 2023 下载和安装教程

    SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...

  7. Blazor中用浏览器打开一个链接的最好方法

    适用于Blazor Wasm和Blazor SSR 调用下面的js方法 说一下为什么不用window.open,有可能被拦截是小问题,大问题是打开新页面未加载完时,回到原页面,大概率卡死,无法点击任何 ...

  8. Pycharm:显示每一行代码的修改记录

    解决方案 安装插件GitToolBox

  9. 关于No changes detected

    查看app在settings.py文件夹中是否有注册.

  10. asp.net core之Options

    本文将介绍 ASP.NET Core 中的 Options 概念和使用方法.Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性.我们将详细介绍如 ...