这个叉姐也提过,但是貌似不是很流行。。虽然现在看来四毛子就算用了这个也不快。。
就是一个序列先分块,然后上层 ST 表,然后对于每一块不需要构造 ±1 RMQ ,因为本来无非就是要使用单调栈构造笛卡尔树,那么记录单调栈的进栈出栈的 01 序列,称其为笛卡尔树序列(比如说进栈是 1 出栈是 0 ,可将其记录在一个 int 里),两个块不同他们的这个序列也不同,然后只要用暴力预处理不同的笛卡尔树序列就可以了。
具体可以看 CS166 http://web.stanford.edu/class/cs166/lectures/01/Slides01.pdf