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

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

    题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值。

    思路:RMQ模板题,开两个数组维护最大值和最小值就行。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <cmath>
     4 #include <algorithm>
     5 using namespace std;
     6 #define N 50010
     7 #define INF 0x3f3f3f3f
     8 int dpmin[N][20], dpmax[N][20], n;
     9 
    10 void Init() {
    11     memset(dpmin, INF, sizeof(dpmin));
    12     for(int i = 1; i <= n; i++) { scanf("%d", &dpmin[i][0]); dpmax[i][0] = dpmin[i][0]; }
    13     int limit = (int)(log(n) / log(2));
    14     for(int j = 1; j <= limit; j++)
    15         for(int i = 1; i + (1 << j) - 1 <= n; i++)
    16             dpmin[i][j] = min(dpmin[i][j-1], dpmin[i+(1<<(j-1))][j-1]), dpmax[i][j] = max(dpmax[i][j-1], dpmax[i+(1<<(j-1))][j-1]);
    17 }
    18 
    19 int Query(int l, int r) {
    20     int k = (int)(log(r - l + 1) / log(2));
    21     return max(dpmax[l][k], dpmax[r-(1<<k)+1][k]) - min(dpmin[l][k], dpmin[r-(1<<k)+1][k]);
    22 }
    23 
    24 int main() {
    25     int q;
    26     while(~scanf("%d%d", &n, &q)) {
    27         Init();
    28         while(q--) {
    29             int l, r; scanf("%d%d", &l, &r);
    30             printf("%d
    ", Query(l, r));
    31         }
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    DAY21
    DAY20
    DAY19
    @Autowired注解和静态方法
    PageHelper.startPage和new PageInfo(list)的一些探索和思考
    escape()、encodeURI()、encodeURIComponent()区别详解
    每日日报29
    1dialog 表单最基本的封装
    mongoose
    数组
  • 原文地址:https://www.cnblogs.com/fightfordream/p/6344905.html
Copyright © 2011-2022 走看看