P3960
P3960 [NOIP2017 提高组] 列队
题意简述
给定一个
思路
首先来考虑线性的情况。
我们需要
- 删去一个位置上的数。
- 把这个数放到尾部。
对于2,使用一个 vector
即可。
对于1,不是真的把它删除。考虑用线段树维护整个序列的位置,每个节点记录这个区间被删除的数字个数
找到是第几个数,分类讨论:
- 在
,使用公式计算。 - 后面,在
vector
内查询。
这个线段树的长度需要达到
进入正题
发现每一行是独立的,只跟最后一列有关。
我们用上面的方法维护每一行的线段树(称vector
vector
讨论:
,此时在 中查询第 个数,使用上面的分类讨论方法得到编号,然后插入到 。 ,还是要像 一样,但是编号是要插入 (第 列的现在变成 ,而维护长度就是 ,相当于插入了末尾了),在 中查询第 个数,得到的编号要插入 (因为它到 去了)。
线段树的大小:
由于开不下
写程序计算空间:
注意动态开点线段树要用引用,有些地方开 long long
。
本文作者:wscqwq
本文链接:https://www.cnblogs.com/wscqwq/p/18169726
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步