--- id: 1DRQ title: "1D Range Queries" author: Benjamin Qi prerequisites: - - Gold - Binary Indexed Trees --- General range queries for associative operations, including segment tree. ## Static Range Queries Given a static array $A[1],A[2],\ldots,A[N]$, you want to answer queries in the form $A[l]\ominus A[l+1]\ominus \cdots \ominus A[r]$ in $O(1)$ time each with $O(N\log N)$ time preprocessing, where $\ominus$ denotes any associative operation. In the case when $\ominus$ denotes `min`, preprocessing can be done in $O(1)$ time. ### Tutorial - [Range Minimum Query](https://en.wikipedia.org/wiki/Range_minimum_query) - Use for $O(1)$ LCA - CPH 9.1 - [cp-algorithms RMQ](https://cp-algorithms.com/sequences/rmq.html) ### Divide & Conquer **Divide & conquer** can refer to many different techniques. In this case, we use it to answer $Q$ queries offline in $O((N+Q)\log N)$ time. Suppose that all queries satisfiy $L\le l\le r\le R$ (initially, $L=1$ and $R=N$). Letting $M=\left\lfloor \frac{L+R}{2}\right\rfloor$, we can compute $$lef[l]=A[l]\ominus A[l+1]\ominus \cdots \ominus A[M]$$ for all $L\le l\le M$ and $$rig[r]=A[M+1]\ominus A[M+2] \ominus \cdots\ominus A[r]$$ for each $M< r\le R$. Then the answer for all queries satisfying $l\le M