A.Equivalent Prefixes
题目大意:等价数组定义为(1≤l≤r≤m)中,所有的子区间都满足最小值下标相等,找出最大的m。
题解:我们要找到最大的m,就要保证两个数组的所有子区间最小值下标相等
所以用一个单调栈来维护一个单调递增的序列,栈底为最小值,保证最小值下标相等,以及栈中元素相同
即可保证子区间最小值下标相等
例如:ABCDE
假设C是最小值,A这个区间肯定是可以,AB这个区间肯定是要满足递增或者递减
ABC这个区间就已经满足,因为最小值就是C,同理ABCD,ABCDE,BC,BCD,BCDE,CD,CDE满足。
然后就是DE,如果两个数组不满足递增或递减,那么栈中元素必定不同,那么m就是D下标,反之就是E。•
C++代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int a[maxn],b[maxn];
int main(int argc, char const *argv[])
{
int n ;
while(cin >> n){
for(int i = ;i <= n ; i ++) cin >> a[i];
for(int i = ;i <= n ; i++) cin >> b[i];
stack<int> s1,s2;
int flag = ;
for(int i = ;i <= n ; i++){
while(!s1.empty() && s1.top() > a[i]) s1.pop();
while(!s2.empty() && s2.top() > b[i]) s2.pop();
s1.push(a[i]);s2.push(b[i]);
cout << s1.size() << " " << s2.size() << endl;
if(s1.size() != s2.size()){
printf("%d\n", i -);
//goto out;
flag = ;break; } }if(!flag)
printf("%d\n", n);
}
return ;
}
官方题解
做法 1
• 题中的“equivalent”等价于笛卡尔树相同
• 二分答案,比较两个前缀的笛卡尔树 O(n log n)
笛卡尔树:点击此处
做法 2
• 对于数组 a,定义 lasta
(i) = max { j : j < i and aj > ai
}
• 如果 lasta = lastb,那么数组 a 和 b“equivalent”
证明:n, last(n), last(last(n)), ... 是笛卡尔树的最右路径,递归构造
• 单调队列求 last 并比较 O(n)
A.Equivalent Prefixes的更多相关文章
- A.Equivalent Prefixes(ST算法)
Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第一场) - A - Equivalent Prefixes - 单调栈
A - Equivalent Prefixes - 单调栈 题意:给定两个n个元素的数组a,b,它们的前p个元素构成的数组是"等价"的,求p的最大值."等价"的 ...
- 牛客多校第一场 A Equivalent Prefixes 单调栈(笛卡尔树)
Equivalent Prefixes 单调栈(笛卡尔树) 题意: 给出两个数组u,v,每个数组都有n个不同的元素,RMQ(u,l,r)表示u数组中[l,r]区间里面的最小值标号是多少,求一个最大的m ...
- 2019牛客多校第一场 A.Equivalent Prefixes
题目描述 Two arrays u and v each with m distinct elements are called equivalent if and only if RMQ(u,l,r ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- Equivalent Prefixes
题目链接 题意:给你两个数组a,b,大小为n,让你寻找一个数p (1<= p <= n) ,使之在 1~p 任意一个区间中a,b数组的最小值下标相同. 思路:看到用线段树去写的我也是服了. ...
- 2019 牛客多校第一场 A Equivalent Prefixes
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题目大意 定义 RMQ(u, L, R) 为 u 数组在区间 [L, R] 上最小值的下标. 如果有 2 ...
- 2019牛客暑期多校赛(第一场) A Equivalent Prefixes(单调栈)
传送门:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个数组a和b,求最大的p,满足在区间 [1,p] 中任何区间的两个数组的最小值的下标都相等. 思 ...
随机推荐
- SpringBoot中资源初始化加载的几种方式
一.问题 在平时的业务模块开发过程中,难免会需要做一些全局的任务.缓存.线程等等的初始化工作,那么如何解决这个问题呢?方法有多种,但具体又要怎么选择呢? 二.资源初始化 1.既然要做资源的初始化,那么 ...
- 【Luogu4191】[CTSC2010] 性能优化
题目链接 题意简述 求循环卷积意义下的 \(A(x)*B(x)^C\). 模数为 n+1 ,长度为 n. Sol 板子题. 循环卷积可直接把点值快速幂来解决. 所以问题就是要快速 \(DFT\),由于 ...
- Java面试之基础篇(2)
11.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用 ...
- 线程协作之threading.Condition
领会下面这个示例吧,其实跟java中wait/nofity是一样一样的道理 import threading # 条件变量,用于复杂的线程间同步锁 """ 需求: 男:小 ...
- SonarQube规则之bug类型
1.".equals()" should not be used to test the values of "Atomic" classes.bug 主要不要 ...
- c++复习——类(2)
1.this指针 this指针是一个指向对象的指针. this指针是一个隐含于成员函数中的对象指针. this指针是一个指向正在调用成员函数的对象的指针. 类的静态成员函数没有this指针 ...
- 有关于TreeSet的自我理解
TreeSet是依靠TreeMap来实现的. TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口 ...
- 6.25考试整理:江城唱晚&&不老梦&&棠梨煎雪——题解
按照旧例,先安利一下主要作者:一扶苏一 以及扶苏一直挂念的——银临姐姐:银临_百度百科 (滑稽) 好哒,现在步入正题: 先看第一题: 题解: 在NOIP范围内,看到“求方案数”,就说明这个题是一个计数 ...
- SpringCloud 教程 (七)服务注册(consul)
一.consul 简介 consul 具有以下性质: 服务发现:consul通过http 方式注册服务,并且服务与服务之间相互感应. 服务健康监测 key/value 存储 多数据中心 consul可 ...
- 修改mac默认python版本 为python3
mac一般自带python2.7 可以修改 ~/.bash_profile (具体的path取决于你的python3安装路径): vi ~/.bash_profile # 添加这一行 alias py ...