题意
下标0到n-1,初始全为0
两种操作:
1 a f 从位置a开始往后,每遇到0就将它变为1,直到改变了f个或者到末尾,输出改变的第一个值和最后一个值的下标
2 x y 把[x,y]所有的值置为0,并输出总共改变了多少个值
分析
线段树维护当前区间还有多少空位tree[o]
lazy标记当前区间全被置空(0)或置满(1),或无标记(-1)
操作1:
1. 先判断从a位置到末尾总共有多少个空位k
区间查询和
2.输出左值l = 第一个空位下标,输出右值r = 第min(f,k) 个空位下标、
3.将[ l,r] 区间全部置为1即tree[o] = 0
操作2:
直接将所给区间全部置为0即tree[o] = 区间长度(常规操作!)
返回值为改变的tree[o]
pushdown:
如果标记存在
如果标记为1:将tree左右区间全部赋值为0,表示全满
如果标记为0:将tree左右区间全部赋值为区间长度,表示全空
清空当前区间的标记:lazy[o] = -1;