传送门


如果对于每一个操作\(i\)找到这个操作中所有的数都被pop掉的时间\(ed_i\),那么剩下就直接差分覆盖一下就可以了。

那么考虑如何求出\(ed_i\)。发现似乎并没有什么数据结构能够维护于是考虑分块。

对于每一个块分别考虑整块操作和散块操作的答案。

先考虑整块:注意到对于按照时间顺序的整块操作,答案一定是递增的,所以考虑双指针优化。

假设当前做到第\(j\)个操作,维护指针\(k\)表示当前已经做完了\((j,k]\)的所有操作。我们需要考虑当前操作会对当前块中的每一个queue产生怎样的影响。

记录\(B_i\)表示每一个队列还有\(B_i\)次会把当前数pop掉并记录下\(Mx\)表示\(B_i\)的最大值,同时记录标记\(cov\)表示\(B_i\)的区间标记。每一次\(k\)右移的时候,如果当前操作是整块操作就\(cov+=1\),否则将当前区域的所有\(B_i -= 1\)然后更新\(Mx\),当\(Mx \leq cov\)时表示当前操作的所有数全部被pop掉了。\(j\)往右移的时候就是撤销操作。

然后考虑散块。因为散块的数量是\(O(M)\)的,所以我们可以暴力枚举块中的每一个位置,复杂度也就是\(O(M\sqrt{N})\)的。

也就是说在每一次做的时候我们只能枚举所有散块操作。考虑处理出所有的散块操作,并处理出所有的散块操作之前的所有整块操作,为了方便可以在所有的操作之后加上一个空的散块操作。注意到散块操作和整块操作一样,被pop的时间更晚的加入的时间也会更晚,所以也可以双指针优化。利用跟上面类似的操作即可计算出结果。

代码

LOJ2461 完美的队列 分块的更多相关文章

  1. [loj2461]完美的队列

    参考论文,这里一共写了论文中的3种做法,第一种做法为强制在线时的做法,第二种为时间复杂度略高的做法(前两种都无法通过),第三种为本题正解,并给出了一种理论复杂度更优的做法 1.做法1 情况1 $\fo ...

  2. 【loj2461】【2018集训队互测Day 1】完美的队列

    #2461. 「2018 集训队互测 Day 1」完美的队列 传送门: https://loj.ac/problem/2461 题解: 直接做可能一次操作加入队列同时会弹出很多数字,无法维护:一个操作 ...

  3. 【LOJ2461】「2018 集训队互测 Day 1」完美的队列(分块+双指针)

    点此看题面 大致题意: 让你维护\(n\)个有限定长度的队列,每次区间往队列里加数,求每次加完后的队列里剩余元素种类数. 核心思路 这道题可以用分块+双指针去搞. 考虑求出每个操作插入的元素在队列中被 ...

  4. @loj - 2461@ 「2018 集训队互测 Day 1」完美的队列

    目录 @description@ @solution@ @part - 0@ @part - 1@ @accepted code@ @details@ @description@ 小 D 有 n 个 ...

  5. 【BZOJ2473/2120】维护队列 分块+二分

    Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...

  6. [BZOJ2453]维护队列|分块

    Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有多少.当然,A有时候会 ...

  7. 【bzoj2453】维护队列 (分块 + 二分)

    传送门(权限题) 题目分析 题意为:求区间内有多少种不同的数,带修改. 首先对原序列分块,用last[i]表示与i相同的上一个在哪里,然后将分块后的数组每个块内的按照last进行排序,这样查询时就可以 ...

  8. BZOJ 2453 维护队列 | 分块

    题目: http://www.lydsy.com/JudgeOnline/problem.php?id=2453 题解: 考虑维护每个位置的颜色上一次出现在哪里,计为pre[i],在询问l到r的时候, ...

  9. nmq消息队列解析

    消息中间件NMQ 1.What is nmq? nmq = new message queue; 一个通用消息队列系统 为在线服务设计 什么是消息队列?问什么需要?有哪些功能? 消息队列的本质:1.多 ...

随机推荐

  1. linux高性能服务器编程 (四) --TCP/IP通信案例

    第四章 TCP/IP通信案例 HTTP代理服务器的大致工作原理        在HTTP通信链上,客户端和服务器之间通常存在某些中转代理服务器.它们提供对目标资源的中转访问.一个HTTP请求可能被多个 ...

  2. Netty 优雅退出

    Netty 优雅退出机制和原理:https://www.infoq.cn/article/netty-elegant-exit-mechanism-and-principles/?utm_source ...

  3. Spring中为什么继承了ApplicationContextAware接口就可以使用ApplicationContext对象?

    1.Spring中使用applicationContext对象 public class SpringContextUtil implements ApplicationContextAware { ...

  4. return & exit . in GO

    return结束当前函数,并返回指定值runtime.Goexit结束当前goroutine,其他的goroutine不受影响,主程序也一样继续运行os.Exit会结束当前程序,不管你三七二十一

  5. 开发日记:DotNetCore 批处理 发布

    @echo off@title 中医科院 - 发布@echo ******************************************************@echo ========= ...

  6. Redis面试大全

    1. 什么是Redis Redis是由意大利人Salvatore Sanfilippo(网名:antirez)开发的一款内存高速缓存数据库.Redis全称为:Remote Dictionary Ser ...

  7. Python浮点数数据精度控制

    代码 import decimal from decimal import Decimal, getcontext if __name__ == '__main__': decimal.getcont ...

  8. 【ML基础】t-SNE(t-distributed stochastic neighbor embedding)原理及推导

    前言 参考 1. t-SNE原理与推导: 完

  9. K8S使用入门-添加一个node

    上一篇博客我们已经将K8S部署起来了,现在我们就来介绍一下如何简单使用K8S (1)添加节点 注意事项:不能和k8s master节点的主机名一样.否则会导致k8s无法正常识别出该节点 添加节点是比较 ...

  10. SpokenEnglish01_ When's it due?

    1 Pronunciation and Intonation When's it due? 解析:When’s it due? 2 Key Points 2.1 Due adj: 到期的,截止的 It ...