分为n块,建立一个块表,将现在的每个块都给一个编号,编好号加入块表(下标从1开始)。建立块数组block=[1,2,3,......,n]
定义函数 blockq(x),如果x>0,返回块表的第x个,否则返回块表的第∣x∣个翻转后的结果。复杂度O(n)。
区间翻转时,对于整块暴力翻转这段整块对应的block数组并将数组内所有数取相反数。同时更新tag=1。
非整块操作,如tag=1将此块对应的数替换为blockq(x),将tag清空,暴力修改需要修改的部分,将新块存入块表,更新此块的编号为块表分配的编号。
查值显然可以直接暴力。稍微改改可支持区间修改,区间求和等线段树操作
所以分块是数据结构之真理(雾