POJ 3264

来源:互联网 发布:数据科学入门 pdf 编辑:程序博客网 时间:2024/04/29 10:24
/*Balanced Lineup区间最值的查询*/#include<cstdio>#include<cstring>#include<vector>#include<algorithm>using namespace std;#define lson (pos<<1)#define rson (pos<<1|1)const int maxn = 55555;int min_v[maxn << 2],max_v[maxn << 2];void pushup(int pos){    min_v[pos] = min(min_v[lson],min_v[rson]);    max_v[pos] = max(max_v[lson],max_v[rson]);}void build(int l,int r,int pos){    if(l == r){        int v;        scanf("%d",&v);        min_v[pos] = max_v[pos] = v;        return;    }    int mid = (l + r) >> 1;    build(l,mid,lson);    build(mid + 1,r,rson);    pushup(pos);}void query(int L,int R,int l,int r,int pos,int& min_size,int& max_size){    if(l <= L && R <= r){        min_size = min(min_size,min_v[pos]);        max_size = max(max_size,max_v[pos]);        return;    }    int mid = (L + R) >> 1;    if(l <= mid)        query(L,mid,l,r,lson,min_size,max_size);    if(r > mid)        query(mid + 1,R,l,r,rson,min_size,max_size);}int main(){    int n,m;    while(scanf("%d%d",&n,&m) != EOF){        build(1,n,1);        for(int i = 0; i < m; i++){            int max_value = -1,min_value = 10000000;            int x,y;            scanf("%d%d",&x,&y);            query(1,n,x,y,1,min_value,max_value);            printf("%d\n",max_value - min_value);        }    }    return 0;}

0 0
原创粉丝点击