rt,这是正常人的st表查询代码:
int query(int l,int r){
int s = lg[r - l + 1];
return max(st[s][l],st[s][r - (1 << s) + 1]);
}
然后有一天我发现有些人是这么写的:
#define clz __builtin_clz
long long get_maxa(int l,int r){
long long s = 31 - clz(r - l + 1);
return max(max_a[l][s],max_a[r - (1 << s) + 1][s]);
}
所以下面这一种为什么是对的?