题意


给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是“等价”的,求$p$的最大值。“等价”的意思是在其任意一个子区间内的最小值相同。 $[link]$

分析


这题有两种做法,笛卡尔树和单调栈,这里暂且只介绍单调栈的做法。

我们先假设$p=i$成立,考虑新加进来的$i+1$,如果以$i+1$为右端点构成的所有区间最小值相同,那么$p$就可以更新为$i+1$(这样的话就可以通过小区间的最小值位置相同依次证明大区间的最小值位置相同)。或者换句话说,$i+1$处的值对前面区间最小值造成的影响相同的话,就认为$p=i+1$成立。

考虑使用单调栈去做(由于是最小值我们维护一个递增的单调栈)。每次单调栈中的元素会回答以栈顶元素为结尾的区间的最小值是多少。

比如数组:
2,4,3,5,1

前1个元素的单调栈:
{ {2,1} }
意思是[1,1]的最小值是2

前2个元素的单调栈:
{ {2,1}, {4,2} }
意思是[1,2]的最小值是2,[2,2]的最小值是4

前3个元素的单调栈:
{ {2,1}, {3,3} }
意思是[1,3]的最小值是2,[2,3]的最小值是3,[3,3]的最小值是3

前4个元素的单调栈:
{ {2,1}, {3,3}, {5,4} }
意思是[1,4]的最小值是2,[2,4]的最小值是3,[3,4]的最小值是3,[4,4]的最小值是5

前5个元素的单调栈:
{ {5,1} }
意思是[x,5]的最小值都是1

两个“等价”的数组单调栈里元素个数肯定相同,我们把$i+1$所在的值加进去的时候之后会有进栈或者还有出栈的操作,所以每次只需要比较单调栈的大小就可以知道$i+1$造成的影响是否相同,即新加的元素是某能让数组保持“等价”。

Code

#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5+5;
int a[maxn], b[maxn], sta[maxn], stb[maxn];
int n, topa, topb; int main()
{
while(~scanf("%d", &n)) {
for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
for(int i = 1; i <= n; i++) scanf("%d", &b[i]);
int ans = 0;
topa = topb = 0;
for(int i = 1; i <= n; i++) {
while(topa&&a[sta[topa]]>=a[i]) topa--;
sta[++topa] = i;
while(topb&&b[stb[topb]]>=b[i]) topb--;
stb[++topb] = i;
if(topa==topb) ans++;
else break;
}
printf("%d\n", ans);
} }

参考博客:

https://www.cnblogs.com/Yinku/p/11210511.html

https://blog.csdn.net/qq_41289920/article/details/96899277

https://www.cnblogs.com/kongbursi-2292702937/p/11280900.html

2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)的更多相关文章

  1. 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)

    题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...

  2. 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)

    题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...

  3. 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem

    题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3  4 2 3 4 输出:0 0 1 题解: 认真想一 ...

  4. 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)

    题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...

  5. 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)

    layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...

  6. 牛客多校第一场 A Equivalent Prefixes 单调栈(笛卡尔树)

    Equivalent Prefixes 单调栈(笛卡尔树) 题意: 给出两个数组u,v,每个数组都有n个不同的元素,RMQ(u,l,r)表示u数组中[l,r]区间里面的最小值标号是多少,求一个最大的m ...

  7. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  8. 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...

  9. 2019牛客暑期多校训练营(第一场)-A (单调栈)

    题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...

  10. 2019牛客暑期多校训练营(第一场) B Integration (数学)

    链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...

随机推荐

  1. SQL Server On Linux:基于实际项目案例,总结功能支持情况及相关问题解决方案,讲如何快速完成迁移

    上个月,有个朋友问我说Sql Sever向Mysql迁移有什么好的经验分享,他们公司客户明确提出不再提供Windows服务器,现在计划Mysql迁移.我说Mysql迁移成本太高了,不妨可以了解一下SQ ...

  2. PHP 导入Excel数据 到数据库

    /** * 导入excel * @throws \PHPExcel_Exception * @throws \PHPExcel_Reader_Exception */ public function ...

  3. 改进你的c#代码的5个技巧(三)

    本文完全独立于前两篇文章.如果你喜欢它们,我希望你也会喜欢这个.在上一篇文章中,我展示了哪种方法更快,并比较了代码的执行速度.在本文中,我将展示不同代码片段的内存消耗情况.为了显示内存映射和分配图,我 ...

  4. C++ 异常机制(上)

    目录 一.概念 二.异常的好处 三.基本语法 四.栈解旋 五.异常接口声明 六.异常对象的内存模型 七.异常对象的生命周期 一.概念 异常:存在于运行时的反常行为,这些行为超过了函数的正常的功能范围. ...

  5. Python绘制雷达图(俗称六芒星)

    原文链接:https://blog.csdn.net/Just_youHG/article/details/83904618 背景 <Python数据分析与挖掘实战> 案例2–航空公司客户 ...

  6. 如何构建一个多人(.io) Web 游戏,第 2 部分

    原文:How to Build a Multiplayer (.io) Web Game, Part 2 探索 .io 游戏背后的后端服务器. 上篇:如何构建一个多人(.io) Web 游戏,第 1 ...

  7. Pulsar vs Kafka,CTO 如何抉择?

    本文作者为 jesse-anderson.内容由 StreamNative 翻译并整理. 以三个实际使用场景为例,从 CTO 的视角出发,在技术等方面对比 Kafka 和 Pulsar. 阅读本文需要 ...

  8. 查看Java的汇编指令

    在IDEA配置VM options,打印汇编指令 -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly windows系统 下载插件 hsdis-amd6 ...

  9. StringBuilder和输入输出

    构建字符串(StringBuilder的应用) 有些时候,需要由较短的字符串构建字符串,例如:按键或来自文件的单词,采用字符串连接的方式达到此目的效率比较低.每次连接字符串,都会构建一个新的Strin ...

  10. typora+PicGo+gitee搭建免费的的床

    一.gitee 1.第一步拥有自己的gitee账号 没有的可以自己去注册gitee地址 2.使用自己的gitee账号创建仓库 创建好之后注意 记住.com/以后的地址 此处就为y***L/photo- ...