int dp
[MAX_N
][log2(MAX_N
)+2],a
[MAX_N
];
void rmq_init(){
for(int i
=1;i
<=N
;i
++)
dp
[i
][0]=a
[i
];
for(int j
=1;(1<<j
)<=N
;j
++){
for(int i
=1;i
+(1<<j
)-1<=N
;i
++){
dp
[i
][j
]=min(dp
[i
][j
-1],dp
[i
+(1<<j
-1)][j
-1]);
}
}
}
int rmq(int l
,int r
){
int k
=log2(r
-l
+1);
return min(dp
[l
][k
],dp
[r
-(1<<k
)+1][k
]);
}
转载请注明原文地址: https://win8.8miu.com/read-1498240.html