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\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...
随机推荐
- UnrecognizedPropertyException: Unrecognized field 解决
转载请注明出处: 在项目得不同环境上对接外部的服务接口,且存在不同版本间可能有字段不同得问题,遇到这种问题在使用jackson解析时,如果格式化得字符串与定义得java类不能完全对应时,就会报错:Un ...
- SpringBoot 多环境切换
日常开发中一般都会有三个不同的环境,分别是开发环境(dev),测试环境(test)和生产环境(prod),不同的环境各种配置都不相同,比如数据库配置,服务器端口等等. Spring Boot 多环境配 ...
- AutoreleasePool 的总结
1.创建和释放时机问题 App启动后,苹果在主线程 RunLoop 里注册了两个 Observer,其回调都是 _wrapRunLoopWithAutoreleasePoolHandler(). 第一 ...
- 前端使用CSS固定表头
* { margin: 0; padding: 0 } .tableFixedTop { padding: 20px } .tableFixedTop table { border: 1px soli ...
- Hexo博客Next6.0版本主题配置(背景图片加载、侧边栏社交小图标设置、设置网站图标)
随机背景图片加载 原理 自动更换背景是修改添加背景的css样式实现 图片来源 https://source.unsplash.com/ 修改背景样式 修改themes\next\source\css\ ...
- Blazor前后端框架Known-V1.2.5
V1.2.5 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Gith ...
- Error: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000: java.net.ConnectException: 拒绝连接 (Connection refused) (state=08S01,code=0)
一:启动hiveserver2服务 二:启动beeline 三:连接hiveserver2(下面的1000000端口号适当改小写因为其超出最大端口号的范围建议改为10000) 如果启动不成功实现我们先 ...
- 类WPF跨平台模仿TIM
类WPF跨平台模仿TIM Avalonia是什么? Avalonia 是一个功能强大的框架,使开发人员能够使用 .NET 创建跨平台应用程序.它使用自己的渲染引擎来绘制UI控件,确保在各种平台上保持一 ...
- vlunhub笔记(一)deathnote
(一)查询靶机ip 通过 arp-scan -l 查询目标靶机ip,查询结果如下图红框所示. (二)信息收集 直接访问目标ip,发现无法访问,只返回网站域名. 网站返回域名,就将该域名添加进hosts ...
- 介绍vue3的钩子函数activated和deactivated使用场景
activated和deactivated是Vue3中的两个生命周期钩子函数. activated钩子函数在组件被激活时调用,通常用于恢复组件的状态或执行一些初始化操作.例如,如果一个组件被从路由中激 ...