求欧拉序
每log分一块
每段找最小值
共n/log块
然后建st表,复杂度n/log*log = n
每块记前后缀最小
过至少一块很好求
对于在一块的:
由于欧拉序的标号前后只会相差1
所以序列种类只有2^k种
k<=log
所以暴力枚举每一位是+1/-1
然后每一种情况找出来最值位置即可
查询即可o(1)
共预处理o(n)询问o(1)
然后cz说只要外面套个笛卡尔树就可以直接解决所有rmq啦(但是我不太会笛卡尔树啊)
求欧拉序
每log分一块
每段找最小值
共n/log块
然后建st表,复杂度n/log*log = n
每块记前后缀最小
过至少一块很好求
对于在一块的:
由于欧拉序的标号前后只会相差1
所以序列种类只有2^k种
k<=log
所以暴力枚举每一位是+1/-1
然后每一种情况找出来最值位置即可
查询即可o(1)
共预处理o(n)询问o(1)
然后cz说只要外面套个笛卡尔树就可以直接解决所有rmq啦(但是我不太会笛卡尔树啊)