码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3264 Balanced Lineup

时间:2018-08-23 23:10:15      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:空间复杂度   动态规划   max   ons   poj   就是   ++   初始   pre   

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

标签:空间复杂度   动态规划   max   ons   poj   就是   ++   初始   pre   

原文地址:https://www.cnblogs.com/fridayfang/p/9526877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!