zoukankan      html  css  js  c++  java
  • poj Balanced Lineup(3264)!

    此题也算技巧提吧!dp预处理将

     1 #include <stdio.h>
     2 #include <math.h>
     3 
     4 int dpmax[50010][20],dpmin[50010][20],n,a[50010];
     5 int max (int x,int y)
     6 {
     7     return x>y?x:y;
     8 }
     9 int min (int x,int y)
    10 {
    11     return x<y?x:y;
    12 }
    13 void init ()
    14 {
    15     int i,j;
    16     for(i=1;i<=n;i++)
    17     {
    18        dpmax[i][0]=a[i];
    19        dpmin[i][0]=a[i];
    20     } 
    21     for(j=1;j<=log((double)(n+1))/log(2.0);j++)
    22     for(i=1;i+((1<<j)-1)<=n;i++)
    23     {
    24         dpmax[i][j]=max(dpmax[i][j-1],dpmax[i+(1<<j-1)][j-1]);
    25         dpmin[i][j]=min(dpmin[i][j-1],dpmin[i+(1<<j-1)][j-1]);
    26     } 
    27 }
    28 int getmax( int a , int b ){
    29     int k = (int)(log((double)(b-a+1))/log(2.0));
    30     return max( dpmax[a][k] , dpmax[b-(1<<k)+1][k] );    
    31 }
    32 int getmin( int a , int b ){
    33     int k = (int)(log((double)(b-a+1))/log(2.0));
    34     return min( dpmin[a][k] , dpmin[b-(1<<k)+1][k] );    
    35 }
    36 int main ()
    37 {
    38     int m,i,j;
    39     while(scanf("%d%d",&n,&m)!=EOF)
    40     {
    41         for(i=1;i<=n;i++)
    42             scanf("%d",&a[i]);
    43         init();
    44         while(m--)
    45         {
    46             int a,b;
    47             scanf("%d%d",&a,&b);
    48             printf("%d
    ",getmax(a,b)-getmin(a,b));
    49         }
    50     }
    51 }
  • 相关阅读:
    Release和Debug的区别[转]
    SVM运用到多分类[引]
    HMM
    [转] 数据挖掘 机器学习 模式识别的关系
    [转]mysql 数据导入
    java 获取当前时间戳
    二叉树遍历建树[zhuan]
    关于c指针[转]
    词法分析
    组合数据类型练习,综合练习
  • 原文地址:https://www.cnblogs.com/ace-top/p/3268902.html
Copyright © 2011-2022 走看看