python rmq

来源:互联网 发布:局内Windows无法访问 编辑:程序博客网 时间:2024/06/03 20:34
import mathdef init( arr ):        arr_len = len( arr )    exp = int( math.log( arr_len, 2 ) )    DP = [ [ 0 for col in range( exp + 1 ) ] for row in range( arr_len + 1 ) ]    for index, item in enumerate( arr ):        DP[index + 1][0] = item    for e in range( 1, exp + 1 ):        for start in range( 1, arr_len + 1 ):            if start + ( 1 << e ) - 1 > arr_len:                break            DP[start][e] = max( DP[start][e - 1], DP[start + ( 1 << ( e - 1 ) )][e - 1] )    return DPdef ask( DP, left, right ):    cut = int( math.log( right - left + 1, 2 ) )    return max( DP[left][cut], DP[right + 1 - ( 1 << cut )][cut] )DP = init( [ 3, 4, 1, 6, 7, 2, 10 ] )print( ask( DP, 1, 1 ) )print( ask( DP, 1, 2 ) )print( ask( DP, 1, 7 ) )

0 0
原创粉丝点击