i位置开始的后2^j个数中的最大值
用f[i][j]表示从j到j+2i-1的最小值(长度显然为2i)。...②不过区间在增加时,每次并不是增加一个长度,而是基于倍增思想,用二进制右移,每次增加2^i个长度 ,最多增加logn次
这样预处理了所有2的幂次的小区间的最值
查询:
③对于每个区间,分成两段长度为的区间...,再取个最值(这里的两个区间是可以有交集的,因为重复区间并不影响最值)
比如3,4,6,5,3一种分成3,4,6和6,5,3,另一种分成3,4,6和5,3,最大值都是6,没影响。...因为位置过了一半,所以x到y的最小值可以表示为min(从x往后2t的最小值,从y往前2t的最小值),前面的状态表示为f[t][x]
设后面(从y往前2t的最小值)的初始位置是k,那么k+2t-1=y,...,O(1)查询最值 但不支持修改
预处理时间复杂度O(nlogn),查询时间O(1)。