zoukankan      html  css  js  c++  java
  • POJ 3264 Balanced Lineup(ST模板)

    链接:http://poj.org/problem?id=3264

    题意:给n个数,求一段区间L,R的最大值 - 最小值,Q次询问

    思路:ST表模板,预处理区间最值,O(1)复杂度询问

    AC代码:

     1 #include<iostream>
     2 #include<vector>
     3 #include<cstdlib>
     4 #include<cstdio>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<set>
     8 #include<cstring>
     9 #include<queue>
    10 #include<map>
    11 using namespace std;
    12 typedef long long ll;
    13 const int maxn = 50005;
    14 const int logn = 21;
    15 int Log[maxn];
    16 int MIN[maxn][logn];
    17 int MAX[maxn][logn];
    18 int cow[maxn];
    19 int n,q;
    20 void pre(){
    21     Log[1] = 0;
    22     Log[2] = 1;
    23     for(int i = 3;i<=n;i++){
    24         Log[i] = Log[i/2] + 1;
    25     }
    26 }
    27 void st(){
    28     for(int i = 1;i<=n;i++){
    29         MIN[i][0] = MAX[i][0] = cow[i]; 
    30     }
    31     for(int j = 1;(1<<j)<=n;j++){
    32         for(int i = 1;i+(1<<j)-1<=n;i++){
    33             MAX[i][j] = max(MAX[i][j-1],MAX[i+(1<<(j-1))][j-1]);
    34             MIN[i][j] = min(MIN[i][j-1],MIN[i+(1<<(j-1))][j-1]); 
    35         }
    36     }
    37 }
    38 int main()
    39 {
    40     scanf("%d%d",&n,&q);
    41     for(int i = 1;i<=n;i++){
    42         scanf("%d",&cow[i]);
    43     }
    44     pre();
    45     st();
    46     while(q--){
    47         int A,B;
    48         scanf("%d%d",&A,&B);
    49         int s = Log[B-A+1];
    50         int range_max = max(MAX[A][s],MAX[B-(1<<s)+1][s]);
    51         int range_min = min(MIN[A][s],MIN[B-(1<<s)+1][s]);
    52         cout<<range_max-range_min<<endl;
    53     }
    54     return 0;
    55 }
  • 相关阅读:
    linux异常处理体系结构
    网站、架构、集群相关资源
    (转)分布式Web服务器架构的演变与技术需求
    B树、B树、B+树、B*树详解(转)
    (转)事件和路由事件概述
    LCID及Culture Name列表
    触摸键盘概述
    MySQL远端连接设置
    C#实现平衡多路查找树(B树) (转)
    CentOS6.3 LAMP运营环境安装
  • 原文地址:https://www.cnblogs.com/AaronChang/p/12192992.html
Copyright © 2011-2022 走看看