zoukankan      html  css  js  c++  java
  • RMQ 模板题 poj 3264

    题目:点这里

    题意:给一个长度n的数列,然后又Q个询问,问L   到R   中最大值与最小值的差。

    分析:RMQ 的模板题。

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    const int max_=50005;
    int minm,maxm;
    int dp_max[max_][20],dp_min[max_][20];
    int a[max_];
    void RMQ_init(int n)
    {
        for(int i=1;i<=n;i++)
           dp_max[i][0]=a[i],
           dp_min[i][0]=a[i];
        for(int j=1;(1<<j)<=n;j++)
            for(int i=1;i+(1<<j)-1<=n;i++)
        {
            dp_max[i][j]=max(dp_max[i][j-1],dp_max[i+(1<<(j-1))][j-1]);
            dp_min[i][j]=min(dp_min[i][j-1],dp_min[i+(1<<(j-1))][j-1]);
        }
    }
    void RMQ_Q(int L,int R)
    {
        int k=0;
        while((1<<(k+1))<=R-L+1)k++;
        minm=min(dp_min[L][k],dp_min[R+1-(1<<k)][k]);
        maxm=max(dp_max[L][k],dp_max[R+1-(1<<k)][k]);
    }
    int main()
    {
        int n,m;
      scanf("%d %d",&n,&m);
            for(int i=1;i<=n;i++)
               scanf("%d",&a[i]);
            RMQ_init(n);
            while(m--)
            {
                int l,r;
                cin>>l>>r;
                RMQ_Q(l,r);
               printf("%d
    ",maxm-minm);
            }
    }

    用  cin  和cout  会超时……

  • 相关阅读:
    PAT甲级1137Final Grading
    晚测6
    模拟15
    模拟14
    模拟13
    晚测5
    晚测4
    模拟11
    7012. 2021.03.15【2021省赛模拟】十
    7011. 2021.03.13【2021省赛模拟】nonintersect
  • 原文地址:https://www.cnblogs.com/linhaitai/p/9707557.html
Copyright © 2011-2022 走看看