莫队在二维平面上进行。
对于区间的莫队,考虑现在在([l,r]),可以快速把l++,l--,r++,r--
把((l,r))投射到平面上,则我们可以把这个点往四个方向移动一格。
事实上,由于询问互相不影响,我们回答询问的顺序是任意的。
回答询问顺序的最小代价是曼哈顿距离哈密顿链,好像是npc的。
考虑近似算法。
分块,每次处理(l)在区间([a,b])的答案。
把右端点其所在块排序,然后按照这个顺序移动。
处理(l),(r)在某个确定块的代价不超过(O(sqrt{n}))
把(r)移动到下一个块时可能很慢,但是均摊时间复杂度是(O(n))的。
于是总时间复杂度(O(nsqrt{n}))
如果有三个限制((a,b,c)),则事实上是三维空间的最小曼哈顿距离哈密顿链。
考虑分块,把每维分成(n^{frac{1}{3}})个块。
把所有块按照(a,b)所在的块,(c)作为第一,第二,第三关键字排序。
多个限制同理,如果限制时(a_1...a_n),把(a_1,a_2...a_{n-1})所在的块,(a_n)作为第一,第二...第(n)关键字排序。