RMQ
初始化
max_cow[i][0] = min_cow[i][0] = a[i];
void rmq(int n){
for(int j = 1;(1 << j) <= n; j++){
for(int i = 1;i + (1 << j) - 1 <= n; i++){
max_cow[i][j] = max(max_cow[i][j - 1],max_cow[i + (1 << (j - 1))][j - 1]);
min_cow[i][j] = min(min_cow[i][j - 1],min_cow[i + (1 << (j - 1))][j - 1]);
}
}
}
查询
int sear(int a,int b){
int AX,IN;
int len = (int) (log(b - a + 1.0) / log(2.0));
AX = max(max_cow[a][len],max_cow[b - (1 << len) + 1][len]);
IN = min(min_cow[a][len],min_cow[b - (1 << len) + 1][len]);
return AX - IN;
}