列队
像这种大题,我们可以先直接按正解想,如果没啥思路,就转而考虑部分分,部分分会给我们提示的
最小的部分分就不说了,纯暴力
看一下
显然除了第一行,其他都是摆设,所以把第一行和最后一列放在一起考虑
然后就转化为了“谜一样的牛”这一道题目,时间复杂度
然后考虑正解
我们刚才是单独考虑了第一行和最后一列,所以正解中也单独考虑最后一列
问题是行怎么办?我们依葫芦画瓢,也单独考虑每一行
稍微模拟一下就知道,对某一行,其他行的操作只会改变这一行最后一位人的编号(从这里也可以看出最后一列是非常特殊的,我们需要单独拿出来考虑),所以我们考虑对同一行一起处理
所以我们离线处理,将询问排序,按照
我们对同一行的询问建立一个树状数组(具体实现),对每个询问算出其真实想删除的人在数组里面的真实位置(“谜一样的牛”)
然后我们又把询问排序回去,依次考虑每个询问
在处理询问的过程中,我们用
比如(
1 2 3 4 7 5 3
表示从最开始到现在,进入过这一行的编号是以上,其中前四个是最开始的四个人(没有用实际的数据结构存储),后面三个是后面加入进来的(在vector当中),而在这个时刻,真实的队列编号可能是
1 2 7 3
或其他一些可能的情况
对当前的这个询问
如果有标记,就在最后一列上进行操作
否则考虑其询问的真实位置
注意维护vector和最后一列即可
update 2024.5.14
说一个自己想出来的新做法:
对最后一列的处理仍然像上面这样,现在主要是处理行的问题
我们仍然考虑对每一行怎么处理,显然我们没办法存储每一个
具体来说,对每一行开一个vector,存储每个
其实这两种做法的核心思路就是不去维护
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构