首页 > 其他分享 >Lucky Array 题解

Lucky Array 题解

时间:2023-07-27 19:12:30浏览次数:41  
标签:10 int 题解 复杂度 Lucky pos Array include

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;
}

标签:10,int,题解,复杂度,Lucky,pos,Array,include
From: https://www.cnblogs.com/TKXZ133/p/17585808.html

相关文章

  • P9017 [USACO23JAN] Lights Off G 题解
    Description给定正整数\(N\),和两个长为\(N\)的\(01\)序列\(a\)和\(b\)。定义一次操作为:将\(b\)序列中的一个值翻转(即\(0\)变成\(1\),\(1\)变成\(0\),下同)。对于\(b\)序列中每个值为\(1\)的位置,将\(a\)序列中对应位置的值翻转。将\(b\)序列向右循环移位......
  • CF938G Shortest Path Queries 题解
    目录题目链接题目分析为什么使用生成树建树对于异或贡献的分析code题目链接CF938G洛谷挂了只能交CF题目分析本题有以下几个关键点:为什么使用生成树建树首先根据\(WC2011\)我们发现可以使用\(dfs\)序来保存节点之间的关系但是我们发现本题目中存在加边删边操作不......
  • UVA10702 Travelling Salesman 题解
     UVA10702TravellingSalesman题解题面:有个旅行的商人,他每到一个的新城市,便卖掉所有东西再购买新东西,从而获得利润。从某城市A到某城市B有固定利润(B 到A 的利润可能不同)。已知城市可以重复到达,从S 点出发,经过T 个城市,有E个城市能作为终点,求最大的利润。先定义......
  • CF1053E-Euler Tour题解
    前言还是一道神仙题很难想题面luogu上copy的样例解释懒得翻,我觉得应该都看得懂样例吧。题面翻译现有一棵\(n\)个点的形态未知的树,给定其长度为\(2n-1\)的欧拉序的一部分请根据给出的残缺的欧拉序还原出一个完整的欧拉序或判断不存在这样的树输入中用非零数字表示欧拉......
  • INNOVUS批量摆放cell array的脚本
    说明:invs_place_cell_array-prefix$prefix-libcell$libcell-hornum$hornum-vernum$vernum-startX$startX-startY$startY-spaceX$spaceX-spaceY$spaceY-orientation$orientation,类似于ICC2中create_cell_array的用法procinvs_place_cell_array{args}{ ......
  • Python使用 - array
    常用操作 常见用法arr1=array.array("i",[1,2])#元素的字节数print(arr1.itemsize)#4print(len(arr1))#2#添加元素arr1.append(3)arr1.append(4)print(len(arr1))#4print(arr1)#array('i',[1,2,3,4])#修改元素arr1[0]=10print(arr1)#......
  • P3704 [SDOI2017] 数字表格 题解
    一、题目描述:用$f_i$表示斐波那契数列的第$i$项,那么有:$f_0=0,f_1=1;f_n=f_{n-1}+f_{n-2},n\ge2$现在有一个$n$行$m$列的数字表格,第$i$行第$j$列的数字是$f_{\gcd(i,j)}$。求这个表格所有数的乘积。共有$T$组数据,答案对$10^9+7$取模。......
  • Xcode12 开发12.5.7版本IOS的问题解决
    1.xcode12默认是创建的工程是14.2,所以需要修改一下工程版本。点击项目最上面的蓝色文件就可以打开下面的界面了。2.安装app之后,界面黑屏。解决方法如下:在AppDelegate.h中:#import<UIKit/UIKit.h>@interfaceAppDelegate:UIResponder<UIApplicationDelegate>//增......
  • [ARC143B] Counting Grids 题解
    CountingGrids题目大意将\(1\simn^2\)填入\(n\timesn\)的网格\(A\)中,对于每个格子满足以下条件之一:该列中存在大于它的数。该行中存在小于它的数。求方案数。思路分析首先有一个比较显然的结论:对于一个不合法的方案,有且仅有一个数不满足任何一个条件。考虑......
  • [ABC308G] Minimum Xor Pair Query 题解
    MinimumXorPairQuery题目大意维护一个序列,支持动态插入,删除,查询最小异或对。思路分析看到查询最小异或对首先想到01Trie,但01Trie不支持删除,考虑暴力套一个线段树分治。需要预处理出每个元素的存活区间,这里使用了map<int,vector<int>>。注意,有的元素会存活到最后,需要特......