1.特点:
用于区间最大,小值问题,初始化 O(n log n), 查询 O(1),缺点是无法修改。
2.初始化:
int Log2[MAXN],f[MAXN][K];(2^K>MAXN)
for(int i=1;i<=MAXN;i++) Log2[i]=Log2[i/2]+1;
for(int i=1;i<=MAXN;i++) cin>>f[i][0]; (读入数据)
for(int i=1;i<=K;i++){
for(int j=1;j+(1<<i)<=MAXN;j++){ (倍增)
f[j][i]=max(f[j][i-1],f[j+(1<<i-1)][i-1]); (以j开头,长度为2^i)
}
}
O(n log n);
3.查询:
cin>>l>>r;
int bit=Log2[r-l];
ans=max(f[l][bit],f[r-(1<<bit)+1][bit]);
O(1);