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\) 的矩阵,你可以选定矩阵中任意一个元素以及上.下.左.右四个方向中的任意一个方向进行游戏. ...
随机推荐
- 【Docker】部署Tomcat
搜索镜像 $ docker search 镜像名称:镜像TAG # 如: 没有加TAG,表示默认搜索的是最新版本的tomcat镜像 $ docker search tomcat # 如:搜索 tomc ...
- Isito 入门(四):微服务可观测性
本教程已加入 Istio 系列:https://istio.whuanle.cn 目录 可观测性 通过 Gateway 访问 Kiali 查看链路追踪数据 可能失败的原因 修复 Kiali Grafa ...
- 反汇编分析C语言
环境 VC6.0环境 空函数反汇编 #include "stdafx.h" void function(){ } int main(int argc, char* argv[]) ...
- DNS与CDN技术
参考链接: CDN原理简单介绍 浅析:DNS解析和CDN加速 DNS报文格式解析
- 2023-7-27WPF的ContextMenu的传参绑定方式
WPF的ContextMenu的绑定方式 [作者]长生 ContextMenu为何不能正常绑定 在wpf中ContextMenu和ToolTip一样都是弹出层,与VisualTree已经分离了,只不过 ...
- jQuery事件冒泡和默行为
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【更新】【解决中文文件名乱码】mac一键获取最新datagrid 2017.3注册码到剪贴板
背景与前版实现请见: 前版原文 需要the unarchiver 解决中文文件名在mac上创建文件异常. 代码调整 IDEA_JIHUOMA_HOME="/tmp/idea-jihuoma& ...
- C#程序的启动显示方案(无窗口进程发送消息) - 开源研究系列文章
今天继续研究C#的WinForm的实例显示效果. 我们上次介绍了Winform窗体的唯一实例运行代码(见博文:基于C#的应用程序单例唯一运行的完美解决方案 - 开源研究系列文章 ).这就有一个问题,程 ...
- [nginx]借助nginx实现自动获取本机IP
前言 在用脚本自动化部署应用时,有的应用需要指定本机IP,网上找到的方案大多是过滤ifconfig或者ip命令的结果,这里提供一种通过nginx获取本机ip的方法.大致思路为客户端向nginx发起请求 ...
- [shell]在curl测试的data参数中引用变量
在curl测试的data参数中引用变量 前言 在使用curl接口进行接口传参时,常会使用如下方法: #!/bin/bash url="http://192.168.0.10:8000/api ...