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);

posted on 2024-03-21 15:14  Grylls_117  阅读(8)  评论(0编辑  收藏  举报