• poj 3264 RMQ 水题


    题意:找到一段数字里最大值和最小值的差

    水题

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 using namespace std;
     8 const int maxn=550;
     9 const int INF=0x3f3f3f3f;
    10 int n,m,t;
    11 const int MAXN = 50010;
    12 int dpMAX[MAXN][20],dpMIN[MAXN][20];
    13 int mm[MAXN];
    14 int cow[MAXN];
    15 //初始化RMQ, b数组下标从1开始,从0开始简单修改
    16 void makemaxRMQ(int n,int b[])
    17 {
    18     for(int i=1;i<=n;i++)
    19       dpMAX[i][0]=b[i];
    20     for(int j=1;(1<<j)<=n;j++)
    21       for(int i=1;i+(1<<j)-1<=n;i++)
    22         dpMAX[i][j]=max(dpMAX[i][j-1],dpMAX[i+(1<<(j-1))][j-1]);
    23 }
    24 int rmqMAX(int s,int v)
    25 {
    26     int k=(int)(log(v-s+1.0)/log(2.0));
    27     return max(dpMAX[s][k],dpMAX[v-(1<<k)+1][k]);
    28 }
    29 void makeminRMQ(int n,int b[])
    30 {
    31     for(int i=1;i<=n;i++)
    32       dpMIN[i][0]=b[i];
    33     for(int j=1;(1<<j)<=n;j++)
    34       for(int i=1;i+(1<<j)-1<=n;i++)
    35         dpMIN[i][j]=min(dpMIN[i][j-1],dpMIN[i+(1<<(j-1))][j-1]);
    36 }
    37 int rmqMIN(int s,int v)
    38 {
    39     int k=(int)(log(v-s+1.0)/log(2.0));
    40     return min(dpMIN[s][k],dpMIN[v-(1<<k)+1][k]);
    41 }
    42 int main()
    43 {
    44     int i,j,k;
    45     #ifndef ONLINE_JUDGE
    46     freopen("1.in","r",stdin);
    47     #endif
    48     int q;
    49     while(scanf("%d%d",&n,&q)!=EOF)
    50     {
    51         for(i=1;i<=n;i++)
    52         {
    53             scanf("%d",&cow[i]);
    54         }
    55         makemaxRMQ(n,cow);
    56         makeminRMQ(n,cow);
    57         for(i=1;i<=q;i++)
    58         {
    59             int a,b;
    60             scanf("%d%d",&a,&b);
    61             printf("%d
    ",rmqMAX(a,b)-rmqMIN(a,b));
    62         }
    63     }
    64     return 0;
    65 }
  • 相关阅读:
    Linux下c程序的编译方法:
    Linux分区机制和常见命令
    java虚拟机内存大小调整:
    break、continue、return循环三剑客之异同
    Scanner中的nextInt()陷阱
    windbg无法下载符号文件
    各种函数调用约定及浮点数传参
    一个crackme的分析
    SetProcessAffinityMask的问题
    x64内联汇编注意点
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4354812.html
Copyright © 2020-2023  润新知