题目大意:等价数组定义为(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的更多相关文章

  1. A.Equivalent Prefixes(ST算法)

    Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048576K 64bit IO Format: %lld 题目描述 ...

  2. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

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

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

    A - Equivalent Prefixes - 单调栈 题意:给定两个n个元素的数组a,b,它们的前p个元素构成的数组是"等价"的,求p的最大值."等价"的 ...

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

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

  5. 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 ...

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

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

  7. Equivalent Prefixes

    题目链接 题意:给你两个数组a,b,大小为n,让你寻找一个数p (1<= p <= n) ,使之在 1~p 任意一个区间中a,b数组的最小值下标相同. 思路:看到用线段树去写的我也是服了. ...

  8. 2019 牛客多校第一场 A Equivalent Prefixes

    题目链接:https://ac.nowcoder.com/acm/contest/881/A 题目大意 定义 RMQ(u, L, R) 为 u 数组在区间 [L, R] 上最小值的下标. 如果有 2 ...

  9. 2019牛客暑期多校赛(第一场) A Equivalent Prefixes(单调栈)

    传送门:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个数组a和b,求最大的p,满足在区间 [1,p] 中任何区间的两个数组的最小值的下标都相等. 思 ...

随机推荐

  1. 过滤函数filter

    >>> def validate(usernames): if (len(usernames) > 4) and (len(usernames) < 12): retur ...

  2. mysql——批量插入数据

    要测试一下新功能,需要测试环境下的数据库有大量的数据,一个个插入显然不现实,需要了解一下存储过程 https://www.cnblogs.com/endtel/p/5407455.html Navic ...

  3. 机器学习中的偏差(bias)和方差(variance)

    转发:http://blog.csdn.net/mingtian715/article/details/53789487请移步原文 内容参见stanford课程<机器学习>   对于已建立 ...

  4. 舞蹈课(dancingLessons)

    有n个人参加一个舞蹈课.每个人的舞蹈技术由整数ai来决定.在舞蹈课的开始,他们从左到右站成一排.当这一排中至少有一对相邻的异性时,舞蹈技术相差最小的那一对会出列并开始跳舞.如果相差最小的不止一对,那么 ...

  5. 【bzoj4136】[FJOI2015]带子串包含约束LCS问题

    题目描述: 带有子串包含约束的最长公共子序列问题可以具体表述如下. 给定2个长度分别为n和m的序列X和Y,以及一个子串包含约束集S. S中共有k个字符串S={S1,S2,…,Sk},其中字符串Si的长 ...

  6. 【BZOJ2460】元素(拟阵)

    题意:给定n个物品,每个物品有属性x和价值y,要求从中选出一些使得价值和最大并且其中没有属性xor和为0的非空子集 n<=1000,x<=1e18,y<=1e4 思路:没有xor和为 ...

  7. 6.12友谊赛T4城市交通费题解

    与普通的最短路径不同的是,题目中新引入了一个计入总体的费用——城市建设费.由于城市建设费由整体的某最大值决定,导致解没有最优子结构的性质,给思维带来难度. 既然最棘手的是城市建设费,我们就对它分类讨论 ...

  8. Linq in not in\like not like

    别人的博客 http://blog.163.com/lesheng@126/blog/static/357364652010102111051668/ using System.Data.Linq.S ...

  9. bootstrap动态调用select下拉框

    html代码: <label for="classify" class="col-sm-2 control-label">填报部门:</lab ...

  10. 从 Quora 的 187 个问题中学习机器学习和NLP

    从 Quora 的 187 个问题中学习机器学习和NLP 原创 2017年12月18日 20:41:19 作者:chen_h 微信号 & QQ:862251340 微信公众号:coderpai ...