题意


给定两个$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. 树莓派3B装ubuntu server后开启wifi

    树莓派官网选择ubuntu server下载映像 step 1: 使用SDFormatter格式化SD卡: step2: 使用win32diskimager工具将映像写入准备好的SD卡: step3: ...

  2. EF Core 6.0的新计划

    今天,我们很兴奋地与你分享Entity Framework Core 6.0的计划. 这个计划汇集了许多人的意见,并概述了我们打算在哪里以及如何优化实体框架(EF Core) 6.0版本.这个计划并不 ...

  3. 使用call、apply、bind继承及三者区别

    js里的继承方法有很多,比如:使用原型链的组合继承.es6的Class.寄生继承以及使用call.apply.bind继承.再说继承之前,我们先简单了解下它们的区别. 一.区别: 同:三者都是改变函数 ...

  4. SAP中数据库表长度的界定

    SAP中,如何查看表和关键字的长度?通过SE11菜单栏Extras->table width 可以看到.然而SAP在系统也会将表分类,特别是在可扩展的表维护视图中,分为如下几类      ult ...

  5. MySQL数据库基础知识及优化

    MySQL数据库基础知识及优化必会的知识点,你掌握了多少? 推荐阅读: 这些必会的计算机网络知识点你都掌握了吗 关于数据库事务和锁的必会知识点,你掌握了多少? 关于数据库索引,必须掌握的知识点 目录 ...

  6. bootstrap 后端模板

    Twitter Bootstrap 框架已经广为人知,用于加快网站,应用程序或主题的界面开发,并被公认为是迄今对于 Web 开发的最有实质性帮助的工具之一.在此之前的,各种各样的界面库伴随着高昂的维护 ...

  7. Django Full Coverage

    Django(个人推荐, 如果项目较大 需要协同开发, 建议使用django这种重量级框架, 如果类似于纯api的后端应用建议使用 flask, 轻量小巧 , 麻雀虽小五脏俱全) 1.Django是什 ...

  8. Linux内存 free 详解

    在Linux下,使用top命令看到内存占用情况:   Mem:  4146788k total, 3825536k used, 321252k free, 213488k buffers Swap: ...

  9. pickle — Python object serialization

    pickle - Python object serialization  消息队列

  10. Understanding go.sum and go.mod file in Go

    https://golangbyexample.com/go-mod-sum-module/ Understanding go.sum and go.mod file in Go (Golang) – ...