列队中对询问离线排序后如何建立树状数组
假设\(m=5\)
其中黑框框表示前\(m-1\)个人,绿框框表示后面加入进来的人,从下文可以知道具体编号不重要
对任意时刻,定义真实位置是\(i\)表示以上数组下标为\(i\)
假设我们现在要删除实际方阵中第二个人,那么我们在这个数组中找到前缀和为\(2\)的位置\(x\),将其变为0,并将绿框框中最前的一个\(0\)变为\(1\),那么这个询问的真实位置就是\(x\)
假设我们现在要删除实际方阵中第四个人,那么我们在这个数组中找到前缀和为\(4\)的位置\(x\),将其变为0,并将绿框框中最前的一个\(0\)变为\(1\),那么这个询问的真实位置就是\(x\)
假设我们现在要删除实际方阵中第五个人,我们就对这一个询问标记一个flag,之后再处理
这样每一个询问的真实位置就可以算出来
由于询问最多\(q\)次,所以树状数组的大小是\(O(m+q)\),其中黑框框是\(m\),绿框框是\(q\)