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;
    }
  • 相关阅读:
    分组声明
    描述项目的典型用户与场景
    用户调研
    10-11-12
    Sprint--5.21
    Cosplay之孩子的妈咪
    作业5.1之5.2
    51nod 1393 1393 0和1相等串
    51nod 1090 3个数和为0(排序+二分)
    51nod 1095 Anigram单词(map的使用)
  • 原文地址:https://www.cnblogs.com/algorithms/p/2586370.html
Copyright © 2011-2022 走看看