前言
在学习莫队算法之前,我一直以为这是一个很高深的算法。(实际上,它就是一个很高深的算法)
这个算法玄学地将分块与暴力两大算法实现了二合一,从而打造出了一个时间复杂度为 O ( N N ) O(N\sqrt N) O(NN)的求解多个区间询问的离线算法。
具体介绍
首先,我们以询问中 l l l所在的区间为第一关键字,以 r r r的位置为第二关键字进行排序。
然后,我们可以先暴力求解第一个询问,并将 L L L指针指向第一个询问的 l l l,将 R R R指针指向第一个询问的 r r r。
随后,对于第 i i i个问题,我们都可以将当前询问的区间 [ l i , r i ] [l_i,r_i] [li,ri]的答案从上一次询问的区间 [ l i − 1 , r i − 1 ] [l_{i-1},r_{i-1}] [li−1,ri−1]的答案推得。只要将 L L L指针从 l i − 1 l_{i-1} l