st表
1.理解
1.d数组表示的含义是什么呢?d[i] [j]表示的是区间[i,i+j^2-1]区间的最大值
2.那如何求的一个区间的最大值呢,利用的是dp思想,比如[5,10]这段区间的最大值,他就会求r-l+1最接近的二次幂。这段区间长度是6,所以与他最接近的因该是4,那这段区间的最值[5,8]和[7,10].这是咋求出来的呢?就是利用最大的二次幂,5的区间长度往后延长4个,10的区间长度往前减少四个,无论如何两个区间都会有交集,而且保了只求[5,10]这个区间。
3.最后总结就是求[l,r]区间最值的公式就是
$$
k=log(r-l+1)//这是于区间长度最接近的二次幂
$$
k=log(r-l+1)//这是于区间长度最接近的二次幂
$$
然后左右端点分别往中间走2^k个距离。
$$
max(d[l][k],d[r-(1<<k)+1][k])
$$
max(d[l][k],d[r-(1<<k)+1][k])
$$
2.模板

浙公网安备 33010602011771号