列队中对询问离线排序后如何建立树状数组

假设m=5

其中黑框框表示前m1个人,绿框框表示后面加入进来的人,从下文可以知道具体编号不重要

对任意时刻,定义真实位置是i表示以上数组下标为i

假设我们现在要删除实际方阵中第二个人,那么我们在这个数组中找到前缀和为2的位置x,将其变为0,并将绿框框中最前的一个0变为1,那么这个询问的真实位置就是x

假设我们现在要删除实际方阵中第四个人,那么我们在这个数组中找到前缀和为4的位置x,将其变为0,并将绿框框中最前的一个0变为1,那么这个询问的真实位置就是x

假设我们现在要删除实际方阵中第五个人,我们就对这一个询问标记一个flag,之后再处理

这样每一个询问的真实位置就可以算出来

由于询问最多q次,所以树状数组的大小是O(m+q),其中黑框框是m,绿框框是q

posted @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示