l o g 2 预 处 理 log2预处理 log2预处理
l g [ i ] = l o g 2 ( i ) + 1 lg[i]=log2(i)+1 lg[i]=log2(i)+1
l g [ i ] = l g [ i − 1 ] + ( 2 l g [ i ] = = i ) lg[i]=lg[i-1]+(2^{lg[i]}==i) lg[i]=lg[i−1]+(2lg[i]==i)
int lg[100001];
inline void log_2()
{
for (int i = 1; i <= n; i++)
{
lg[i] = lg[i - 1] + (1 << lg[i - 1] == i);
}
}
还可以
用这种方法
int Log2[100001];
inline void log_2()
{
for (int i = 2; i <= n; ++i)
Log2[i] = Log2[i / 2] + 1;
}
神之操作
std :: __lg(size_t)
(它是 O ( 1 ) O(1) O(1) 的)