CDOJ-1591(2017 UESTC Training for Graph Theory -A)-程序员宅基地

技术标签: ACM_RMQ  RMQ  CDOJ1591  UESTC-CDOJ  

A - An easy problem A

Time Limit: 1000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

N个数排成一列,Q个询问,每次询问一段区间内的数的极差是多少。

Input

第一行两个整数N(1≤N≤50000),Q(1≤Q≤200000)。接下来一行N个整数a1 a2 a3 ....an,(1≤ai≤1000000000)。接下来Q行,每行两个整数L,R(1≤L≤R≤N)。

Output

对于每个询问输出一行,一个整数表示区间内的极差。

Sample input and output

Sample Input Sample Output
5 3
3 2 7 9 10
1 5
2 3
3 5
8
5
3

题目大意:如题,询问区间最大值减最小值

题目思路:这题只要去维护区间的最值,可以用线段树,分块,简单点的是RMQ


AC代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e4+100;
int dpMin[maxn][20],dpMax[maxn][20];
int a[maxn];
int n,q;

void RMQ()
{
    for(int i=1;i<=n;i++)
        dpMin[i][0] = dpMax[i][0] = a[i];

    for (int j=1;j<=log(n)/log(2);j++)
    {
        for(int i=1;i<=n;i++)
        {
            if (i+(1<<j)-1<=n)
            {
                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]);
            }
        }
    }
}

int getMin(int l,int r)
{
    int k=log(r-l+1)/log(2.0);
    return min(dpMin[l][k],dpMin[r-(1<<k)+1][k]);
}

int getMax(int l,int r)
{
    int k=log(r-l+1)/log(2.0);
    return max(dpMax[l][k],dpMax[r-(1<<k)+1][k]);
}

int main()
{
    cin>>n>>q;
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    RMQ();
    while(q--)
    {
        int l,r;scanf("%d%d",&l,&r);
        printf("%d\n",getMax(l,r)-getMin(l,r));
    }
    return 0;
}
























版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_34731703/article/details/74152715

智能推荐

安装ArcGIS 10.2遇到问题-程序员宅基地

之前按照破解步骤安装过多次也遇到一些大大小小的问题,今天重装又遇到一个新问题就是,安装破解ArcGIS 10.2 成功之后,只能打开ArcCatalog,却无法打开ArcMap,一打开就报错。折腾了一天最后找到了问题所在,那就是显卡驱动的问题。解决办法,请更新显卡驱动,或者调低显卡!

一文读懂CDP是什么?CDP的应用场景和价值是什么?-程序员宅基地

CDP是什么,怎么用,能给企业运营带来什么价值,头部公司是如何通过CDP实现用户运营的

提示org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)_http server 'not implemented': http://repo1.maven.-程序员宅基地

Eclipse工具-点击help->Install New Software->Work with 输入地址:https://otto.takari.io/content/sites/m2e.extras/m2eclipse-mavenarchiver/0.17.2/N/LATEST/重启Eclipse.如果重启后还是报错,Maven Update项目_http server 'not implemented': http://repo1.maven.org/maven2/.m2e/connectors

bugku- 本地管理员_bugku管理员系统-程序员宅基地

需要输入username和password,查看源代码有这样一串特殊符号,看着应该是base64加密过的,解密得到test123Username猜测是admin,密码是test123如果账号密码是正确的,问题应该就是“管理员系统”了,可以尝试改变IP地址用burp添加xff就可以得到flag了..._bugku管理员系统

【AI测试】机器学习项目的测试,算法测试-程序员宅基地

目录一、算法测试1、模型评估2、鲁棒性 (robustness)3、模型安全4、响应速度二、业务测试三、白盒测试四、模型监控五、算法测试学习入门一、算法测试1、模型评估如何评估模型?可以通过泛化能力。泛化能力指的是学习方法对未知数据的预测能力。就好比运动员平时都是在训练场进行训练,而评估运动员的真实实力要看在大赛中的表现。我们实际希望的,是在新样本上能表现得很好的学习器,为了达到这个目的,应该从训练样本中尽可能推演出适用于所有潜在样本的“普通规律”,这.._算法测试

ShardingSphere4.1 + seata1.2+Nacos + Mybatis+springboot.2.2.8.RELEASE_nacos shardingsphere-程序员宅基地

前言再进行使用seta前务必先看各个版本的参数差异http://seata.io/zh-cn/docs/user/configurations.html注意事项seta-server 版本1.0之前和之后略有不一样使用时需注意配置参数有所修改具体请看http://seata.io/zh-cn/docs/user/configurations.htmlseta版本和引入依赖版本必须一致否则可能会导致 no available service 'null' found, please make_nacos shardingsphere

随便推点

【SpringCloud】微服务之服务降级、服务熔断、服务限流三板斧_springcloud服务降级,熔断区别-程序员宅基地

文章目录一、微服务三板斧1.1 服务降级1.2 服务熔断1.3 服务熔断和服务降级的区别1.3 服务限流二、总结一、微服务三板斧在开发微服务系统时我们通常会面临着高并发问题的考验,为了保证服务的可用性,通常会使用降级、限流和熔断进行处理。接下来我们介绍下这三个基本的概念:服务熔断、服务降级和服务限流,为后面讲解Alibaba的Sentinel组件打下扎实的基础。1.1 服务降级服务降级一般是指在服务器压力剧增的时候,根据实际业务使用情况以及流量,对一些服务和页面有策略的不处理或者用一种简单的方式进行_springcloud服务降级,熔断区别

vue tab颜色切换_vue2实现tabbar切换换颜色-程序员宅基地

<!doctype html><html><head><meta charset="utf-8"><title>tab颜色切换</title><script src="js/vue.min.js"></script></head><body><style&..._vue2实现tabbar切换换颜色

Java图片分割与合并-程序员宅基地

一张图片有的时候太大了之后,我们需要把大图分割成若干张小图存入数据库,在读取的时候,需要把若干张小图合成一张大图因此有了如下的代码,首先分割private static void splitImage() throws IOException { //String originalImg = "C:\\img\\split\\a380_1280x1024.jpg"; ..._java图片分割与合并

二分查找的递归与非递归实现(python)-程序员宅基地

二分查找二分查找又称折半查找,优点是比较次数小,查找速度快,平均性能好;缺点就是要求待查表为有序表,且插入删除困难,因此折半查找适用于不经常变动而查找频繁的有序列表递归实现def binary_search(l, item): &quot;&quot;&quot;递归的二分查找&quot;&quot;&quot; if len(l) == 0: return False mid = len(l)//2 if

pthread_create线程创建的过程剖析(转)-程序员宅基地

概述在Linux环境下,pthread库提供的pthread_create()API函数,用于创建一个线程。线程创建失败时,它可能会返回ENOMEM或EAGAIN。这篇文章主要讨论线程创建过程中碰到的一些问题和解决方法。创建线程首先,本文用的实例代码example.c:/* example.c*/#include <stdio.h>#incl...

c语言程序怎么插入unity,c# – 如何轻松地将c代码添加到Unity项目中?-程序员宅基地

您需要将C代码包装在C函数中,然后通过P / Invoke使用它们.例如,MyPlugin.cpp#define MY_API extern "C"class Context{public:const int version = 12345;};MY_API int GetVersion(const Context* _pContext){if (_pContext == nullptr){ret..._unity怎么接入c语言