RMQ问题
#define MAX(a, b) ((a)>(b)?(a):(b))
int num[100] = {3, 9, 10, 4, 0, 7, 1, 8, 12, 5};
int n = 10;
int f[M][M];
void ST(){
int i, j;
int k = (int)(log(n)/log(2)); ///
for(i=0; i<n; i++){
f[i][0] = num[i];
}
for(j=1; j<=k; j++){
for(i=0; i+(1<<j)-1<n; i++){
f[i][j] = MAX(f[i][j-1], f[i+(1<<(j-1))][j-1]);
}
}
}
void RMQ_ST(int s, int e){
int k = (int)(log(e-s+1)/log(2));
printf("%d-%d: %d\n", s, e, MAX(f[s][k], f[e-(1<<k)+1][k]));
}
void main(){
int i, j;
ST();
for(i=0; i<n; i++)
for(j=i; j<n; j++)
RMQ_ST(i, j);
}