zoukankan      html  css  js  c++  java
  • nyist OJ 119 士兵杀敌(三) RMQ问题 Anti

    士兵杀敌(三)

    时间限制:2000 ms  |  内存限制:65535 KB
    难度:5
     
    描述

    南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。

    所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少。

    现在,请你写一个程序,帮小工回答南将军每次的询问吧。

    注意,南将军可能询问很多次。

     
    输入
    只有一组测试数据
    第一行是两个整数N,Q,其中N表示士兵的总数。Q表示南将军询问的次数。(1<N<=100000,1<Q<=1000000)
    随后的一行有N个整数Vi(0<=Vi<100000000),分别表示每个人的杀敌数。
    再之后的Q行,每行有两个正正数m,n,表示南将军询问的是第m号士兵到第n号士兵。
    输出
    对于每次询问,输出第m号士兵到第n号士兵之间所有士兵杀敌数的最大值与最小值的差。
    样例输入
    5 2
    1 2 6 9 3
    1 2
    2 4
    样例输出
    1
    7



    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    int dpMax[100010][35], dpMin[100010][35], a[100010];
    int RMaxQ(int l, int r)
    {
        int k = log(1.0 * r-l+1)/log(2.0);
        return max(dpMax[l][k], dpMax[r-(1<<k)+1][k]);
    }
    int RMinQ(int l, int r)
    {
        int k = log(1.0 * r-l+1)/log(2.0);
        return min(dpMin[l][k], dpMin[r-(1<<k)+1][k]);
    }
    int main()
    {
        int n, q, l, r;
        scanf("%d %d", &n, &q);
        for(int i = 1; i <= n; i++)
        {
            scanf("%d", &a[i]);
            dpMax[i][0] = dpMin[i][0] = a[i];
        }
        for(int j = 1; (1<<j) <= n; j++)
            for(int i = 1; i+(1<<j)-1 <= n; i++)
            {
                dpMax[i][j] = max(dpMax[i][j-1], dpMax[i+(1<<(j-1))][j-1]);
                dpMin[i][j] = min(dpMin[i][j-1], dpMin[i+(1<<(j-1))][j-1]);
            }
        while(q--)
        {
            scanf("%d %d", &l, &r);
            printf("%d\n", RMaxQ(l, r) - RMinQ(l, r));
        }
        return 0;
    }
  • 相关阅读:
    SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件+SpringBoot整合Mybatis-plus
    认证 (authentication) 和授权 (authorization) 的区别
    新手redis集群搭建
    Nginx是什么?
    分布式和集群的区别
    springBoot 项目 jar/war打包 并运行
    pyV8不支持dom操作,关于PyV8的支持DOM的疑问
    Python爬虫:更加优雅的执行JavaScript(PyV8)
    python中正则表达式 re.findall 用法
    Python爬虫-破解JS加密的Cookie
  • 原文地址:https://www.cnblogs.com/wolfred7464/p/3109902.html
Copyright © 2011-2022 走看看