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)=RMQ(v,l,r) for all 1≤l≤r≤m1≤l≤r≤m
where RMQ(w,l,r) denotes the index of the minimum element among wl,wl+1,…,wr.
Since the array contains distinct elements, the definition of minimum is unambiguous.
Bobo has two arrays a and b each with n distinct elements. Find the maximum number p≤n where{a1,a2,…,ap} and {b1,b2,…,bp} are equivalent.
输入描述:
The input consists of several test cases and is terminated by end-of-file.
The first line of each test case contains an integer \(n.\)
The second line contains \(n\) integers \(a1,a2,…,an\)
The third line contains \(n\) integers \(b1,b2,…,bn\)
- \(1≤n≤10^5\)
- \(1≤ai,bi≤n\)
- \(\{a1,a2,…,an\}\) are distinct.
- \(\{b1,b2,…,bn\}\) are distinct.
- The sum of n does not exceed \(5×10^5\).
输出描述:
For each test case, print an integer which denotes the result.
题解
考虑一个数\(a_i\)会对哪些区间的\(RMQ\)造成影响,显然是向左直到第一个比它小的数的位置为止的区间都有影响,那么就有一种判定方法,顺次枚举\(i\),判断\(a_i\)和\(b_i\)向左能影响到的区间,如果能影响到的区间不是完全相同的那么肯定有一个\(RMQ\)不同。
所以现在的问题就变成了维护一个数据结构,可以求出前缀\(max\)。显然单调栈,单调队列,BIT都可以维护(BIT的话以数值为BIT的下标,原数组下标为储存的值,问题就变成了前缀\(max\))
用BIT的话是\(O(n\log n)\)的。单调队列和单调栈的话是\(O(n)\)的。
标算是单调队列,还提供了另一个做法:
题中的“equivalent”等价于笛卡尔树相同,
二分答案,比较两个前缀的笛卡尔树 \(O(n \log n)\)
题解中对单调队列的做法的证明也用了笛卡尔树。
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N], b[N];
int n;
/*
需要一个数据结构,往前找找到第一个数比它小的,返回位置
*/
namespace BIT {
int c[N][2];
#define lowbit(i) (i & -i)
void add(int x, int v, int id) {
for(int i = x; i <= n; ++i) c[i][id] = max(c[i][id], v);
}
int query(int x, int id) {
int ans = 0;
for(int i = x; i; i -= lowbit(i)) ans = max(ans, c[i][id]);
return ans;
}
} using namespace BIT;
int main() {
while(~scanf("%d", &n)) {
for(int i = 1; i <= n; ++i) c[i][0] = c[i][1] = 0;
for(int i = 1; i <= n; ++i) scanf("%d", &a[i]);
for(int i = 1; i <= n; ++i) scanf("%d", &b[i]);
int i;
for(i = 1; i <= n; ++i) {
int l = query(a[i], 0), r = query(b[i], 1);
if(l != r) break;
add(a[i], i, 0); add(b[i], i, 1);
}
printf("%d\n", --i);
}
}
2019牛客多校第一场 A.Equivalent Prefixes的更多相关文章
- 2019 牛客多校第一场 A Equivalent Prefixes
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题目大意 定义 RMQ(u, L, R) 为 u 数组在区间 [L, R] 上最小值的下标. 如果有 2 ...
- 牛客多校第一场 A Equivalent Prefixes 单调栈(笛卡尔树)
Equivalent Prefixes 单调栈(笛卡尔树) 题意: 给出两个数组u,v,每个数组都有n个不同的元素,RMQ(u,l,r)表示u数组中[l,r]区间里面的最小值标号是多少,求一个最大的m ...
- 2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...
- 2019牛客多校第一场E ABBA(DP)题解
链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语 ...
- 2019牛客多校第一场A-Equivalent Prefixes
Equivalent Prefixes 传送门 解题思路 先用单调栈求出两个序列中每一个数左边第一个小于自己的数的下标, 存入a[], b[].然后按照1~n的顺序循环,比较 a[i]和b[i]是否相 ...
- 2019 牛客多校第一场 D Parity of Tuples
题目链接:https://ac.nowcoder.com/acm/contest/881/D 看此博客之前请先参阅吕凯飞的论文<集合幂级数的性质与应用及其快速算法>,论文中很多符号会被本文 ...
- 2019牛客多校第一场 E-ABBA(dp)
ABBA 题目传送门 解题思路 用dp[i][j]来表示前i+j个字符中,有i个A和j个B的合法情况个数.我们可以让前n个A作为AB的A,因为如果我们用后面的A作为AB的A,我们一定也可以让前面的A对 ...
- 【2019牛客多校第一场】XOR
题意: 给你一个集合A,里边有n个正整数,对于所有A的.满足集合内元素异或和为0的子集S,问你∑|S| n<=1e5,元素<=1e18 首先可以转化问题,不求∑|S|,而是求每个元素属于子 ...
- 2019 牛客多校第一场 B Integration
题目链接:https://ac.nowcoder.com/acm/contest/881/B 题目大意 给定 n 个不同的正整数 ai,求$\frac{1}{\pi}\int_{0}^{\infty} ...
随机推荐
- RAID磁盘阵列结构
RAID磁盘阵列结构原理其实很简单,就是每块硬盘不插在主板的硬盘接口上了,而是全插在RAID卡上,然后RAID卡再插到主板上,由RAID卡统一管理硬盘,做各种RAID磁盘策略(RAID0,RAID1, ...
- 【C/C++开发】TinyXml操作(含源码下载)
前言 TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手. 这个解析库的模型通过解析XM ...
- tp5之服务器不显示验证码
今天在使用tp框架的时候遇到的一个bug,前辈们早已有解决方法,遇到了做个笔记 TP5框架,自带的验证码在本地localhost运行是没问题的,可以正常显示,如图: 然后,把框架拿到服务器是去运行,验 ...
- 【Linux文件目录】的一点小结
1. 相关指令: chgrp:改变文件所属用户组 点击(此处)折叠或打开 chgrp [-R] group dirname/filename -R: 基本-r参数都是递归recursive ...
- js实现之--防抖节流【理解+代码】
防抖: 理解:在车站上车,人员上满了车才发走重点是人员上满触发一次. 场景:实时搜索,拖拽. 实现: //每一次都要清空定时器,重新设置上计时器值,使得计时器每一次都重新开始,直到最后满足条件并且等待 ...
- [转帖]GNU, Free Software and Open Source 自由软件与开源软件
GNU, Free Software and Open Source 自由软件与开源软件 https://blog.csdn.net/icycolawater/article/details/7792 ...
- github中的各种操作
1.上传文件到github 如图,你现在有三个项目在一个文件夹中,我们要把它上传到自己的github仓库中,该怎么做呢? 1.首先右击空白处,点击Git Bash Here,出现命令行 2. git ...
- REST Framework接口规范
REST Framework接口规范 一 .发展及其背景介绍 网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备-).因此,必须有一种统一的 ...
- (转)三大WEB服务器对比分析(apache ,lighttpd,nginx)
ref : https://www.iteye.com/blog/hai0378-1860220 一.软件介绍(apache lighttpd nginx) 1. lighttpd Light ...
- Jmeter+Ant+Jenkins构建接口自动化测试平台(Windows)
一.首先先介绍下我的环境: 1. win10系统 2. ant版本:apache-ant-1.10.1(作用:执行脚本,便于后期的持续集成,下载地址:http://ant.apache.org/bin ...