首页 > 其他分享 >数列分块入门

数列分块入门

时间:2024-09-06 19:36:11浏览次数:4  
标签:入门 标记 复杂度 分块 sqrt 数列

分块是一种优秀的思想。

“数据”是分块的目的。不同于大多数树形数据结构,分块中访问数据是容易的,因此,它可以用比前者更简单的方式支持复杂的操作。

“标记”是分块最重要的过程。不同于大多数树形数据结构,分块大多数时候不需要支持标记与标记合并,因此,它能完成一些前者不能完成的事情。


本文接下来给出数论分块入门系列题目的题解。

如果以下题目存在作者知道的其他做法,会一并指出。

LOJ 6277 数列分块入门 1

区间加,单点查询

整块打加标记,散块暴力加,时间复杂度 \(O(q \sqrt n)\)。

另解:线段树 / 树状数组模板,时间复杂度 \(O(q \log n)\)。

LOJ 6278 数列分块入门 2

区间加,区间查询小于给定的数的数的个数

把每个块映射到新数组并从小到大排序,每次查询整块可以二分。

整块加不会改变元素相对大小,打加标记即可;散块暴力修改,并暴力重构。

时间复杂度 \(O(q \sqrt n \log n)\)。

LOJ 6279 数列分块入门 3

区间加,区间查询给定的数的严格前驱

同上一题,时间复杂度 \(O(q \sqrt n \log n)\)。

LOJ 6280 数列分块入门 4

区间加,区间和

整块打加标记,散块暴力加,时间复杂度 \(O(q \sqrt n)\)。

另解:线段树 / 树状数组模板,时间复杂度 \(O(q \log n)\)。

LOJ 6281 数列分块入门 5

区间开方(下取整),区间和

对于整块,如果块内最大值大于 \(1\) 则暴力开方,否则开方操作无效。

势能分析可以说明时间复杂度 \(O(q \sqrt n)\)。

另解:类似上述方法处理线段树的节点,时间复杂度 \(O(q \log n)\)。

LOJ 6282 数列分块入门 6

单点插入,单点询问

块状链表模板。

对原数列按 \(\sqrt {n + q}\) 为块长分块,块之间用链表结构连接,索引下标时至多跳 \(O(\sqrt {n + q})\) 块。

若插入操作后,块长超过 \(2 \sqrt {n + q}\),则暴力将该块分裂为两个块。

时间复杂度 \(O(q \sqrt {n + q})\)。

LOJ 6283 数列分块入门 7

区间加,区间乘,单点查询

整块打加标记和乘标记,散块暴力加 / 乘。

这里的乘标记同时打在原数列和加标记上,即打乘标记时也要对加标记进行乘法。下放时,先下放乘标记,再下放加标记。

时间复杂度 \(O(q \sqrt n)\)。

另解:线段树模板,时间复杂度 \(O(q \log n)\)。

LOJ 6284 数列分块入门 8

区间查询数的出现次数,区间赋值

整块打赋值标记,散块暴力赋值,时间复杂度 \(O(q \sqrt n)\)。

另解:线段树,时间复杂度 \(O(q \log n)\)。

LOJ 6285 数列分块入门 9

区间众数

做法很多,可以用类似于 蒲公英 的分块;也可以离线用回滚莫队。时间复杂度 \(O(q \sqrt n)\)。

标签:入门,标记,复杂度,分块,sqrt,数列
From: https://www.cnblogs.com/bluewindde/p/18400875

相关文章

  • PAT乙级 1030 完美数列 测试点3.4
    一、题目二、代码#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;boolcmp(longlonga,longlongb){ returna<b;}intmain(){ longlongn,p; cin>>n>>p; longlongnum=0,temp=0; ve......
  • 超越常规:斐波那契数列的极速计算技术3
    针对斐波那契数列算法进行详细介绍和优化,从最简单的递归方法到更高效的迭代、缓存、动态规划、公式推导和矩阵解法,最终达到了时间复杂度为O(logn)的快速幂矩阵解法来感受算法的神奇之处,最后可以看到如何实现在输入n=2100000000(21亿)时仅耗时0.02毫秒的最佳效果。一、回顾斐波......
  • PHP8面向对象快速入门五 接口 抽象类
    在PHP中,接口是一种定义方法但不实现它们的方式。接口可以被类实现,使得这些类承诺实现接口中定义的所有方法。接口主要用于定义类的共同行为,而不涉及具体的实现细节。以下是PHP接口的基本用法:定义接口interfaceAnimal{publicfunctionmakeSound();publicfunct......
  • PyTorch从入门到放弃之数据模块
    目录Dataset简介及用法Map-styledatasets类型Iterable-styledatasets类型DataLoader简介及用法Dataset和DataLoader都是用来帮助我们加载数据集的两个重要工具类。Dataset用来构造支持索引的数据集。在训练时需要在全部样本中拿出小批量数据参与每次......
  • 莫队简单入门
    莫队简单入门补最近一场DIV.4时遇到一道需要求区间众数的题目,完善一下技能树。简介:莫队是一种解决离线区间询问问题的方法。能够在\(O(n\sqrt{n})\)的时间复杂度内求出所有询问的答案。大致流程:1.将所有数据分块。有时需要离散化。2.将所有询问离线,并排序。3.对于区间......
  • 【AI大模型】AI大模型热门关键词解析与核心概念入门
    关注公众号ai技术星球回复88即可领取技术学习资料目录导航热门AI大模型关键词解析热门AI大模型关键词解析大模型代码语言:javascript复制-"大模型"的是大型的人工智能模型,特别是在深度学习领域中。这些模型因其庞大的参数数量、复杂的网络结构和在多种任务上的......
  • linux脚本入门编写
    平时一些重复率比较高的linux命令可以写成脚本来操作这样会大大减少操作时间,提升工作效率#!/bin/bash#删除名为sdss-base-system的容器dockerrm-fsdss-base-system#删除名为sdss-base-system的镜像dockerrmisdss-base-system#使用当前目录的Dockerfi......
  • 车载以太网交换机入门基本功(4)—优先级设计与VLAN测试
        在《车载以太网交换机入门基本功(3)》介绍了交换机端口属性和实际的VLAN转发过程。但是,当存在多个待转发的报文时,既要考虑到报文的及时性,又要考虑到转发效率,因此,如何进行有效调度就成了重要问题。一个解决办法是进行优先级设计。优先级设计    优先级设计包括报......
  • 快速掌握AI算法基础:对于AI行业的“共同语言”入门指南
    对于非相关专业的AI产品或者想要转型AI产品的同学,算法知识晦涩难懂,如何用很短的时间快速入门,让你在AI领域更加游刃有余。 一、机器学习、深度学习、强化学习的定义1、机器学习(MachineLearning,ML)机器学习是人工智能(AI)的一个分支领域,旨在通过计算机系统的学习和自动化推......
  • 例2.12 分别编写求n!和输出斐波那契数列的函数,并用两个函数进行测试
    例2.12分别编写求n!和输出斐波那契数列的函数,并用两个函数进行测试2.12.1deffactorial(n):r=1whilen>1:r*=nn-=1returnrdeffib(n):a,b=1,1whilea<n:print(a,end="")a,b=b,a+bprint('%d!=%d'%(......