POJ 3264 Balanced Lineup
Posted fridayfang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3264 Balanced Lineup相关的知识,希望对你有一定的参考价值。
Balanced Lineup
ST表的裸题
- ST采用倍增和动态规划的思想解决
静态
RMQ问题 - 初始化:空间复杂度O(nlogn),时间复杂度O(nlogn)
- 查询一次 O(1);而且这是常数非常小的O(1),而不是像线段树这种毒瘤数据结构(常数非常大)
最近做一道题,ST表和线段树如果算时间复杂度都能过,但线段树就是过不了,自己得ST表还超过内存了,坑
代码:
const int maxn=50010;
int N,Q;
int a[maxn];
int stmin[maxn][16];
int stmax[maxn][16];
void build(){
scanf("%d %d",&N,&Q);
for(int i=1;i<=N;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=N;i++){
stmin[i][0]=a[i];
stmax[i][0]=a[i];
}
int mlen=floor(log2(N));
int mul=1;
for(int j=1;j<=mlen;j++){
for(int i=1;i<=N&&(i+mul)<=N;i++){
stmin[i][j]=std::min(stmin[i][j-1],stmin[i+mul][j-1]);
stmax[i][j]=std::max(stmax[i][j-1],stmax[i+mul][j-1]);
}
mul=mul*2;
}
}
int check(int x,int y){
int len=floor(log2(y-x+1));
int minv=std::min(stmin[x][len],stmin[y-(1<<len)+1][len]);
int maxv=std::max(stmax[x][len],stmax[y-(1<<len)+1][len]);
return maxv-minv;
}
以上是关于POJ 3264 Balanced Lineup的主要内容,如果未能解决你的问题,请参考以下文章