zoukankan      html  css  js  c++  java
  • POJ3264(Balanced Lineup)

    这题可以看成是“集训每日一题0711”的简化版,没有修改操作,只需查询最小和最大的。

    View Code
    #include <stdio.h>
    #define MIN(a,b) ((a)<(b)?(a):(b))
    #define MAX(a,b) ((a)>(b)?(a):(b))
    #define INF 0x7fffffff
    #define N 50001
    int n,m,D;
    int min[4*N],max[4*N];
    void init()
    {
        int i,t;
        for(D=1;D<n+2;D<<=1);
        for(i=1;i<2*D;i++)
        {
            min[i]=INF;
            max[i]=0;
        }
        for(i=1;i<=n;i++)
        {
            scanf("%d",&t);
            min[i+D]=max[i+D]=t;
        }
        for(i=D-1;i^1;i--)
        {
            min[i]=MIN(min[i<<1],min[i<<1|1]);
            max[i]=MAX(max[i<<1],max[i<<1|1]);
        }
    }
    int getmin(int x,int y)
    {
        int i=x+D-1,j=y+D+1,ret=INF;
        for(;i^j^1;i>>=1,j>>=1)
        {
            if(~i&1)    ret=MIN(ret,min[i^1]);
            if(j&1) ret=MIN(ret,min[j^1]);
        }
        return ret;
    }
    int getmax(int x,int y)
    {
        int i=x+D-1,j=y+D+1,ret=0;
        for(;i^j^1;i>>=1,j>>=1)
        {
            if(~i&1)    ret=MAX(ret,max[i^1]);
            if(j&1) ret=MAX(ret,max[j^1]);
        }
        return ret;
    }
    int main()
    {
        int i,a,b;
        while(~scanf("%d%d",&n,&m))
        {
            init();
            for(i=0;i<m;i++)
            {
                scanf("%d%d",&a,&b);
                printf("%d\n",getmax(a,b)-getmin(a,b));
            }
        }
        return 0;
    }
  • 相关阅读:
    mybatis中的动态语句中多条件or如何书写
    安装kibana的docker版
    安装elasticsearch的docker版
    git回滚push过的代码
    java中支付宝支付
    05 docker镜像删除
    远程仓库的搭建
    本地git工作流
    创建本地仓库
    git安装
  • 原文地址:https://www.cnblogs.com/algorithms/p/2586370.html
Copyright © 2011-2022 走看看