设 f i , k f_{i,k} fi,k为从 i i i出发,走 k k k步能够到达的最靠左的点。则有 f i , k + 1 < f i , k f_{i,k+1} < f_{i,k} fi,k+1<fi,k。
显然 f i , 1 = l i f_{i,1} = l_i fi,1=li。
然后是 f i , 2 = min j ≥ l i { l j } f_{i,2} = \min_{j \ge l_i} \{l_j\} fi,2=minj≥li{lj}:
- 对于 j ∈ [ l i , i ) j\in [l_i,i) j∈[li,i), i i i可以在第一步走到 j j j;
- 对于 j > i j>i j>i,如果 l j ≤ i l_j\le i lj≤i我们可以选择在第一步走到 j j j,否则 l j > i l_j > i lj>i, l j l_j lj一定不会被 min x ≥ l i { l x } \min_{x\ge l_i}\{l_x\} minx≥li{lx}取到。
对于 f i , k ( k > 2 ) f_{i,k} (k > 2) fi,k(k>2),有 f i , k = min j ∈ [ f i , k − 1 , f i , k − 2 ) { l j } = min j ∈ [ f i , k − 1 , i ) { l j } f_{i,k} = \min_{j\in [f_{i,k-1},f_{i,k-2})} \{ l_j \} = \min_{j\in [f_{i,k-1},i)} \{ l_j \} fi,k=minj∈[fi,k−1,fi,k−2){lj}=minj∈[fi,k−1,i){lj}。由于显然 f i , k < f i , 2 ≤ min j ≥ i { l j } ( k > 2 ) f_{i,k} < f_{i,2} \le \min_{j\ge i} \{l_j\}(k > 2) fi,k<fi,2≤minj≥i{lj}(k>2),所以也可以写作 f i , k = min j ∈ [ f i , k − 1 , n ] { l j } f_{i,k} = \min_{j\in [f_{i,k-1},n]} \{ l_j \} fi,k=minj∈[fi,k−1,n]{lj}。这个式子中 f i , k f_{i,k} fi,k的取值与 i i i无关而只与 f i , k − 1 f_{i,k-1} fi,k−1有关,所以可以倍增求出 k = 2 j k=2^j k=2j时的 f i , k f_{i,k} fi,k和 ∑ x ∈ [ 1 , k ] f i , x \sum_{x\in [1,k]}f_{i,x} ∑x∈[1,k]fi,x。
实现上,可以强制先走 k = 1 k=1 k=1的第一步 f i , 1 = l i f_{i,1} = l_i fi,1=li,这样的话之后的每一步的转移都满足 f i , k = min j ≥ f i , k − 1 { l j } f_{i,k} = \min_{j\ge f_{i,k-1}} \{ l_j\} fi,k=minj≥fi,k−1{lj}