zoukankan      html  css  js  c++  java
  • 排队

    【题目描述】:

    每天,农夫约翰的N头奶牛总是按同一顺序排好队,有一天,约翰决定让一些牛玩一场飞盘游戏(Ultimate Frisbee),他决定在队列里选择一群位置连续的奶牛进行比赛,为了避免比赛结果过于悬殊,要求挑出的奶牛身高不要相差太大。

    约翰准备了Q组奶牛选择,并告诉你所有奶牛的身高Hi。他想知道每组里最高的奶牛和最矮的奶牛身高差是多少。

    注意:在最大的数据上,输入输出将占据大部分时间。

    【输入描述】:

    第一行,两个用空格隔开的整数N和Q。

    第2到第N+1行,每行一个整数,第i+1行表示第i头奶牛的身高Hi

    第N+2到第N+Q+1行,每行两个用空格隔开的整数A和B,表示选择从A到B的所有牛(1<=A<=B<=N)

    【输出描述】:

    共Q行,每行一个整数,代表每个询问的答案。

    【样例输入】:

    6 3
    1
    7
    3
    4
    2
    5
    1 5
    4 6
    2 2

    【样例输出】:

    6
    3
    0

    【时间限制、数据范围及描述】:

    时间:1s 空间:128M

    1<=N<=50,000; 1<=Q<=200,000; 1<=Hi<=10^6

    分析:

    本题问题是求“每组里最高的奶牛和最矮的奶牛身高差是多少”,故不难想到用ST表一类的算法求解。因此也就是一道模板题。。。

    CODE :

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cstdlib>
     5 #include<cmath>
     6 #include<algorithm>
     7 #include<ctime>
     8 using namespace std;
     9 const int N=1000005,M=25;
    10 int n,q,a[N],f1[N][M],f2[N][M];
    11 int query1(int L,int R){
    12     int k;
    13     k=int(log(R-L+1)/log(2));
    14     return max(f1[L][k],f1[R+1-(1<<k)][k]);
    15 }
    16 int query2(int L,int R){
    17     int k;
    18     k=int(log(R-L+1)/log(2));
    19     return min(f2[L][k],f2[R+1-(1<<k)][k]);
    20 }
    21 int main(){
    22     scanf("%d%d",&n,&q);
    23     for(int i=1;i<=n;i++){
    24         scanf("%d",&a[i]);
    25     }
    26     memset(f2,0x3f,sizeof(f2));
    27     for(int i=1;i<=n;i++){
    28         f1[i][0]=f2[i][0]=a[i];
    29     }
    30     for(int j=1;j<=int(log(n)/log(2));j++){
    31         for(int i=1;i+(1<<j)-1<=n;i++){
    32             f1[i][j]=max(f1[i][j-1],f1[i+(1<<(j-1))][j-1]); 
    33        }
    34     }
    35     for(int j=1;j<=int(log(n)/log(2));j++){
    36         for(int i=1;i+(1<<j)-1<=n;i++){
    37             f2[i][j]=min(f2[i][j-1],f2[i+(1<<(j-1))][j-1]); 
    38        }
    39     }
    40     int l,r;
    41     for(int i=1;i<=q;i++){
    42         scanf("%d%d",&l,&r);
    43         printf("%d
    ",query1(l,r)-query2(l,r));
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    firefox和ie下面的初始化checkbox
    全球宽带排名出炉 韩国第一中国未入榜(附表)
    逆向查询所有父栏目
    js的点点滴滴
    Treeview绑定数据源 层叠结构数据源的应用
    asp.net读取服务器端文件夹列表
    Treeview绑定数据源 层叠结构数据源的应用(续--完善篇)
    VC数据类型
    jQuery核心文档(翻译中)
    iscroll 下拉刷新,上拉加载
  • 原文地址:https://www.cnblogs.com/kanchuang/p/11194062.html
Copyright © 2011-2022 走看看