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

POJ - 3264:Balanced Lineup

时间:2017-11-25 14:25:44      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:span   void   i++   using   nbsp   --   algorithm   st表   ring   

ST表模版

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 50000+10
#define LOG 20
#define pii pair<int,int>
using namespace std;
int dmax[MAXN][LOG];
int dmin[MAXN][LOG];
int n;
int a[MAXN];
void init(){
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        dmax[i][0]=dmin[i][0]=a[i];
    }
    for(int j=1;j<LOG;j++){
        for(int i=1;i<=n;i++){
            if(i+(1<<j)-1>n){
                break;
            }
            dmax[i][j]=max(dmax[i][j-1],dmax[i+(1<<(j-1))][j-1]);
            dmin[i][j]=min(dmin[i][j-1],dmin[i+(1<<(j-1))][j-1]);
        }
    }    
}
int RMQ(int x,int y){
    int len=y-x+1;
    int k=(int)(log(1.0*len)/log(2));
    k=max(k-2,0);
    while((1<<(k+1))<=len)k++;
    int T1=max(dmax[x][k],dmax[y-(1<<k)+1][k]);
    int T2=min(dmin[x][k],dmin[y-(1<<k)+1][k]);
    return (T1-T2);
}
int main()
{
//    freopen("data.in","r",stdin);
    int T;
    scanf("%d%d",&n,&T);
    init();
    while(T--){
        int x,y;scanf("%d%d",&x,&y);
        printf("%d\n",RMQ(x,y));
    }
    return 0;
}

 

POJ - 3264:Balanced Lineup

标签:span   void   i++   using   nbsp   --   algorithm   st表   ring   

原文地址:http://www.cnblogs.com/w-h-h/p/7894892.html

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