2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
题意
给定两个$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(单调栈)的更多相关文章
- 2019 牛客暑期多校 第八场 A All-one Matrices (单调栈+前缀和)
题目:https://ac.nowcoder.com/acm/contest/888/A 题意:找全1矩阵的个数,并且这个全1矩阵不被其他全1矩阵包含 思路:这里引用付队说的话 -> { 这类问 ...
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem
题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3 4 2 3 4 输出:0 0 1 题解: 认真想一 ...
- 2019 牛客暑期多校 第三场 F Planting Trees (单调队列+尺取)
题目:https://ac.nowcoder.com/acm/contest/883/F 题意:求一个矩阵最大面积,这个矩阵的要求是矩阵内最小值与最大值差值<=m 思路:首先我们仔细观察范围,我 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- 牛客多校第一场 A Equivalent Prefixes 单调栈(笛卡尔树)
Equivalent Prefixes 单调栈(笛卡尔树) 题意: 给出两个数组u,v,每个数组都有n个不同的元素,RMQ(u,l,r)表示u数组中[l,r]区间里面的最小值标号是多少,求一个最大的m ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场)-A (单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
随机推荐
- 使用 C# 9 的records作为强类型ID - 路由和查询参数
上一篇文章,我介绍了使用 C# 9 的record类型作为强类型id,非常简洁 public record ProductId(int Value); 但是在强类型id真正可用之前,还有一些问题需要解 ...
- Mybatis的CRUD 增删改查
目录 namespace 命名空间 select insert update delete Mybatis 官网: https://mybatis.org/mybatis-3/zh/getting-s ...
- 跨站脚本漏洞(XSS)基础
什么是跨站脚本攻击XSS 跨站脚本(cross site script),为了避免与样式css混淆所以简称为XSS,是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式. 什么是 ...
- 【Linux】快速创建文件的命令方法
[root@centos7 dir1]# ll total 0 -rw-r--r-- 1 root root 0 Aug 15 02:39 file1 -rw-r--r-- 1 root root 0 ...
- 【Oracle】查看表空间是否为自动扩展
查看指定的表空间是否为自动扩展 SQL> select file_name,autoextensible,increment_by from dba_data_files where tab ...
- kubernets之statefulset资源
一 了解Statefulset 1.1 对比statefulset与RS以及RC的区别以及相同点 Statefulset是有状态的,而RC以及RS等是没有状态的 Statefulset是有序的,拥 ...
- 使用Intelij 运行Android 程序导致的无法安装
前几天的时候更换了开发工具开发Android ,终于不用忍受Android studio 的各种卡顿了.我决定使用一段时间Intelij 开发Android. 之前的程序代码在运行的时候也出现了异常, ...
- RESTful风格、异常处理、Spring框架
1.RESTful风格 什么是RESTful风格? REST是REpressentational State Transfer的缩写,中文翻译为表述性状态转移,REST是一种体系结构,而HTTP是一种 ...
- MATLAB图像处理_Bayer图像处理 & RGB Bayer Color分析
Bayer图像处理 Bayer是相机内部的原始图片, 一般后缀名为.raw. 很多软件都可以查看, 比如PS. 我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化 ...
- 转 2 jmeter常用功能介绍-测试计划、线程组
2 jmeter常用功能介绍-测试计划.线程组 1.测试计划测试用来描述一个性能测试,所有内容都是基于这个测试计划的. (1)User Defined Variables:设置用户全局变量.一般添 ...