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 题解的更多相关文章
- 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 ...
- 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 ...
- CodeForces 122G Lucky Array(一脸懵逼的树状数组)
Petya loves lucky numbers. Everybody knows that lucky numbers are positive integers whose decimal re ...
- codeforces 121 E. Lucky Array
time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...
- CF 121E Lucky Array 【树状数组】
这个题目的数据感觉不能更水了.从复杂度上计算,肯定有极限数据可以卡掉暴力方法的么. 总之,暴力的做法就是树状数组了,对于区间更新,就挨个更新就是了.当然,判断是否是Lucky Number的话,可以用 ...
- CF121E Lucky Array
题解: 这个题好像暴力+线段树就能过 就是对修改操作暴力,线段树维护查询 为啥呢 因为保证了数$<=1e4$,于是这样复杂度$n*1e4=1e9$ 那么特殊数只有30个 又因为操作是只加不减的, ...
- Lucky Array CodeForces - 121E (线段树,好题)
题目链接 题目大意: 定义只含数字$4,7$的数字为幸运数, 给定序列, 区间加正数, 区间询问多少个幸运数 题解: 对于每一个数, 求出它和第一个比它大的幸运数之差, 则问题转化为区间加,查询$0$ ...
- [LeetCode]Remove Duplicates from Sorted Array题解
Remove Duplicates from Sorted Array: Given a sorted array, remove the duplicates in place such that ...
- Leetcode Find Minimum in Rotated Sorted Array 题解
Leetcode Find Minimum in Rotated Sorted Array 题目大意: 对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数.注意,K有 ...
- LuoguP7059 [NWRRC2015]Lucky Chances 题解
Content 有一个名叫 Lucky chances 的游戏,游戏一开始给出一个 \(r\times c\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...
随机推荐
- Health Kit 新版本功能解析,给你丰富运动体验!
华为运动健康服务(HUAWEI Health Kit)6.11.0版本新鲜出炉! 开放活力三环数据助力养成运动习惯,新增水肺潜水.户外探险数据开放-- 丰富运动体验,尽在Health Kit,一起来看 ...
- DevChat:将 GPT-4 无缝融入 VS Code,极致提升你的编程体验
目录 一.絮絮叨叨 1.1 缘起 1.2 嫌弃 1.3 征服 二.认真聊聊 2.1 老板给了少年一个任务 2.2 少年祭出了 DevChat 2.3 让 DevChat 帮着选 web 框架 2.4 ...
- 选择排序与冒泡排序(c语言+Java语言)
选择排序 O(n2) 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾. 重复第二步,直到所有元素均排序完毕. 例 ...
- 音视频开发进阶|第四讲:音频自动增益控制 AGC
在之前的文章中,我们已经接触了两个重要的音频前处理模块 – 回声消除 AEC 和噪声抑制 ANS,它们分别解决了 RTC 场景下的回声.噪声问题,极大提升了用户的体验.至此,音频前处理三剑客中,就只剩 ...
- PTA 21级数据结构与算法实验8—排序
目录 7-1 统计工龄 7-2 寻找大富翁 7-3 点赞狂魔 7-4 插入排序还是归并排序 7-5 插入排序还是堆排序 7-6 逆序对 7-7 堆排序 7-8 石子合并 7-9 第k小 7-10 快速 ...
- SketchUp Pro 2023 下载和安装教程
SketchUp Pro 2023 下载和安装教程 下载链接 123云盘:https://www.123pan.com/s/JyAKVv-NTXB.html 安装教程 演示操作系统:Windows 1 ...
- Blazor中用浏览器打开一个链接的最好方法
适用于Blazor Wasm和Blazor SSR 调用下面的js方法 说一下为什么不用window.open,有可能被拦截是小问题,大问题是打开新页面未加载完时,回到原页面,大概率卡死,无法点击任何 ...
- Pycharm:显示每一行代码的修改记录
解决方案 安装插件GitToolBox
- 关于No changes detected
查看app在settings.py文件夹中是否有注册.
- asp.net core之Options
本文将介绍 ASP.NET Core 中的 Options 概念和使用方法.Options 是一种配置管理机制,可以将应用程序的配置信息从代码中分离出来,提高代码的可维护性和可测试性.我们将详细介绍如 ...