선형 시간의 Range Minimum Query
Range Minimum Query(RMQ)는 세그먼트 트리를 이용하면 시간에 전처리, 시간에 쿼리를 구할 수 있고, Sparse Table을 이용하면 시간에 전처리, 에 쿼리를 할 수 있다.
그런데 시간복잡도만 보면 위의 두 방법보다 빠른 전처리와 쿼리를 하는 것이 가능하다고 한다.
길이 의 수열을 크기가 인 구간들로 나누자. 구간의 개수는 가 될 것이다. 이제 구간 쿼리는 min(쿼리에 포함되는 연속된 구간들의 RMQ, 왼쪽 끝점이 포함된 구간에서의 RMQ, 오른쪽 끝점이 포함된 구간에서의 RMQ)으로 쓸 수 있다. 이제 연속된 구간의 RMQ, 한 구간 내에서의 RMQ를 에 처리하면 된다.
1. 연속된 구간들의 RMQ
연속된 구간들의 RMQ는 Sparse table을 이용하면 전처리, 쿼리가 가능하다.
2. 구간 내에서의 RMQ
크기의 구간에서 RMQ는, Cartesian Tree에서의 LCA와 같은 의미이다. Cartesian Tree는 에 구할 수 있다.
Cartesian Tree에서 LCA를 구하기 위해서 Euler Tour 배열을 만든다. Euler Tour의 크기는 이 된다. Euler Tour 배열에서 각 노드들의 높이를 모두 안다면, 모든 쿼리에 대해서 LCA가 몇 번째 원소인지도 결정할 수 있다. 따라서 수열에서 등장하는 모든 구간들의 Cartesian Tree의 모양에 대해서 에 가능한 모든 쿼리들을 전처리해두면 에 쿼리를 처리할 수 있다.
크기의 구간에서 Euler Tour 높이 배열은 몇 가지 종류나 있을까? Euler Tour의 인접한 원소는 높이 차이가 이기 때문에, 개의 들로 Euler Tour 전체를 표현할 수 있다. 이것을 비트마스킹으로 표현할 수 있고, 따라서 총 가지 경우가 나온다.
Cartesian Tree와 Euler Tour를 만드는 것이 총 이고, 개 종류의 Cartesian Tree에 대해 에 전처리하므로 이 된다.
1번과 2번 과정의 전처리 복잡도를 합하면 이 된다.
로 정하면 복잡도는
이 된다.
따라서 전처리, 쿼리가 된다. 이 방법이 실제로 세그먼트 트리나 Sparse Table보다 빠른 상황은 많지 않을듯 하다.