题意


给定两个$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

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 5e5+5;
  4. int a[maxn], b[maxn], sta[maxn], stb[maxn];
  5. int n, topa, topb;
  6.  
  7. int main()
  8. {
  9. while(~scanf("%d", &n)) {
  10. for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
  11. for(int i = 1; i <= n; i++) scanf("%d", &b[i]);
  12. int ans = 0;
  13. topa = topb = 0;
  14. for(int i = 1; i <= n; i++) {
  15. while(topa&&a[sta[topa]]>=a[i]) topa--;
  16. sta[++topa] = i;
  17. while(topb&&b[stb[topb]]>=b[i]) topb--;
  18. stb[++topb] = i;
  19. if(topa==topb) ans++;
  20. else break;
  21. }
  22. printf("%d\n", ans);
  23. }
  24.  
  25. }

参考博客:

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. day121:MoFang:植物的状态改动(幼苗→成长期)&植物的浇水功能

    目录 1.当果树种植以后在celery的异步任务中调整浇水的状态 2.客户端通过倒计时判断时间,显示浇水道具 3.客户端判断当前种植物状态控制图标的显示和隐藏 4.当用户单击浇水图标, 则根据当前果树 ...

  2. js 判断用户是手机端还是电脑端访问

    通过userAgent 判断,网页可以直接使用 navigation对象 node端 可以通过请求头的 ctx.request.header['user-agent'] const browser = ...

  3. LeetCode108 将有序数组转为二叉搜索树

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  4. 【JS学习】for-in与for-of

    前言:本博客系列为学习后盾人js教程过程中的记录与产出,如果对你有帮助,欢迎关注,点赞,分享.不足之处也欢迎指正,作者会积极思考与改正. 总述: 名称 遍历 适用 for-in 索引 主要建议白能力对 ...

  5. 使用 C# 9 的records作为强类型ID - JSON序列化

    在本系列的上一篇文章中,我们注意到强类型ID的实体,序列化为 JSON 的时候报错了,就像这样: { "id": { "value": 1 }, "n ...

  6. 1V升3V芯片,1V升3.3V芯片,大电流的,低功耗

    一般来说,1V的电压实在很低了,即使是干电池的话,再1V时,也是基本属于没电状态了.还有一种是干电池输出电流大时,也会把干电池的电压从1.5V拉低到1V左右. 更多的是客户对于1V时要能升到3V或者3 ...

  7. 如何在K8s,Docker-Compose注入镜像Tag

    最近在做基于容器的CI/CD, 一个朴素的自动部署的思路是: 从Git Repo打出git tag,作为镜像Tag ssh远程登录到部署机器 向部署环境注入镜像Tag,拉取镜像,重新部署 下面分享我是 ...

  8. watchdog应用实例

    watchdog应用实例 By 鬼猫猫 20130504 http://www.cnblogs.com/muyr/ 实例:监测某文件夹,一旦文件夹里有文件,就把它剪切到其他服务器 import sys ...

  9. k8s之共享存储概述以及演示

    共享存储机制 k8s对有状态的容器应用或者需要对数据进行持久化的应用,在之前的篇章说过,可以将容器内的目录挂载到宿主机的容器目录或者emptyDir临时存储卷. 另外,k8s还开放了两个资源,分别是P ...

  10. MySQL调优之查询优化

    一.查询慢的原因 1.网络 (1)网络丢包,重传 这个比较容易理解.当SQL 从客户端发送到数据库,执行完毕,数据库将结果返回给客户端,这个将数据返回给客户端的过程本质是网络包传输.因为链路的不稳定性 ...