1. 程式人生 > >POJ - 3264:Balanced Lineup

POJ - 3264:Balanced Lineup

n) namespace col pen define amp () 1.0 dma

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