zoukankan      html  css  js  c++  java
  • 2019牛客暑期多校训练营(第一场)

    A .Equivalent Prefixes

    这题有几种不同的方法,目前只会单调栈的写法

    题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意子区间的最小值下标相等。

    思路:用递归思想,假设前k个元素等价,即(a1,ak)和(b1,bk)等价,现在加入ak+1和bk+1,仍满足等价的条件是从右到左第一个小于ak+1的元素下标和第一个小于bk+1的元素的下标相等,所以就用到了单调栈(这个想法比较厉害)

    至于为什么是等价的?分析可以得出,一个数字只能影响的区间范围是比他大的数的区间(以这个数为最小值,向两边扩展,他能向左扩展到第一个比该数小的数,向右也如此)

    所以两个数组分别加入一个数,这个数字如果该数字能影响到的区间相同,则他们的最小值下标还是相同

    例如,先假设p=i成立,那么当p=i+1时,要考虑的区间就是左端点[1,i] ~右端点i+1。先只考察一个数组的时候,很显然能发现的一个问题就是,因为这个题目只关心最小值,所以区间的左端点从i到1变化的时候,如果变化到j了发现a[j] < a[i+1],则左端点<=j那些区间肯定都不用看了,a[i+1]只承担左端点为j+1~i的最小值。

    回到这个题目,所以只需要比较对于每个p,两个数组求出的j的值是否相同就可以了,如果不相同的话一定就GG。

    Code

  • 相关阅读:
    Spark_3:Spark集群搭建
    Spark_2:Spark 快速入门教程
    Spark快速大数据分析_11:第十一章
    Spark快速大数据分析_10:第十章
    Spark快速大数据分析_9:第九章
    Spark快速大数据分析_8:第八章
    Spark快速大数据分析_7:第七章
    Spark快速大数据分析_6:第六章
    Spark快速大数据分析_5:第五章
    java 内部类详解
  • 原文地址:https://www.cnblogs.com/wizarderror/p/11243312.html
Copyright © 2011-2022 走看看