【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组
题目描述
给出两个长度为 $n$ 的排列 $A$ 和 $B$ ,如果 $A_i>A_{i+1}$ 则可以交换 $A_i$ 和 $A_{i+1}$ 。问是否能将 $A$ 交换成 $B$ 。
输入
输入数据第一行包含一个正整数 $n$ 。
接下来两行每行 $n$ 个正整数,分别描述排列 $A$ 和排列 $B$ 。
输出
对于每组数据,如果存在这样的指令序列,输出“YES”,否则输出“NO”(引号不输出,请注意大小写)。
样例输入
5
4 1 2 5 3
1 2 4 3 5
样例输出
YES
题解
结论题+树状数组
结论:能将 $A$ 交换成 $B$ 的充要条件为:不存在 $i<j$ 使得 $A_i<A_j$ 且 $B_i>B_j$ 。
证明:简单模拟冒泡排序的过程即可得出结论。
那么我们要判断的就是是否存在 $i<j$ 使得 $A_i<A_j$ 且 $B_i>B_j$。
这看起来是一个三维偏序问题,但实际上我们只需要判断其存在性。因此可以:扫描法处理 $i<j$ ,对于从小到大的每个 $j$ ,找出所有 $A_i<A_j$ 中 $B_i$ 的最大值,看最大值是否大于 $B_j$,然后再加入 $j$ 。
这样就可以仅使用树状数组解决问题,时间复杂度 $O(n\log n)$
#include <cstdio>
#include <algorithm>
#define N 100010
using namespace std;
int n , a[N] , b[N] , f[N];
inline void add(int x , int a)
{
int i;
for(i = x ; i <= n ; i += i & -i)
f[i] = max(f[i] , a);
}
inline int query(int x)
{
int i , ans = 0;
for(i = x ; i ; i -= i & -i)
ans = max(ans , f[i]);
return ans;
}
int main()
{
int i , x;
scanf("%d" , &n);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &x) , a[x] = i;
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &x) , b[x] = i;
for(i = 1 ; i <= n ; i ++ )
{
if(query(a[i]) > b[i])
{
puts("NO");
return 0;
}
add(a[i] , b[i]);
}
puts("YES");
return 0;
}
【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组的更多相关文章
- Testing Round #12 A,B,C 讨论,贪心,树状数组优化dp
题目链接:http://codeforces.com/contest/597 A. Divisibility time limit per test 1 second memory limit per ...
- 实验室外的攻防战 UOJ#180 [树状数组]
实验室外的攻防战 UOJ#180 [树状数组] 题目 时针指向午夜十二点,约定的日子--2月28日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 \(picks\) 博士所在的实验室 ...
- 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)
链接:https://ac.nowcoder.com/acm/contest/392/F来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536K ...
- 洛谷P3688/uoj#291. [ZJOI2017]树状数组
传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...
- [UOJ#334][NOIP2017]列队 平衡树/线段树/树状数组
题目链接 题意不说了,一辈子也忘不掉 解法1.平衡树 这题就是平衡树裸题,每一行开一棵维护前 \(m-1\) 个,最后一列单独维护,因为很多人没有用到,所以平衡树每个节点是一个区间(pair),分裂时 ...
- 2021.12.10 P5041 [HAOI2009]求回文串(树状数组求逆序对)
2021.12.10 P5041 [HAOI2009]求回文串(树状数组求逆序对) https://www.luogu.com.cn/problem/P5041 题意: 给一个字符串 \(S\) ,每 ...
- UOJ【UR #12】实验室外的攻防战
题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...
- csu 1770按钮控制彩灯实验(树状数组)
1770: 按钮控制彩灯实验 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 194 Solved: 65[Submit][Status][Web Bo ...
- Codeforces Beta Round #12 (Div 2 Only) D. Ball 树状数组查询后缀、最值
http://codeforces.com/problemset/problem/12/D 这里的BIT查询,指的是查询[1, R]或者[R, maxn]之间的最值,这样就够用了. 设三个权值分别是b ...
随机推荐
- 20145226夏艺华 《Java程序设计》第2周学习总结
教材学习内容总结 学习目标 了解Java编程风格 认识Java的类型与变量 掌握Java流程控制的方法(分支.循环) 教材第三章内容总结 认识类型与变量 学习运算符的基本使用 了解类型转换细节 运用基 ...
- OO原则汇总
SOLID原则:http://www.cnblogs.com/lanxuezaipiao/archive/2013/06/09/3128665.html https://www.cnblogs.com ...
- 北京Uber优步司机奖励政策(4月11日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 【转载】OGRE 2.1 Windows 编译
OGRE 2.1 Windows 编译 环境: Windows 7 64Bit Visual Studio 2012 OGRE 2.1 CMake 2.8.12.1 OGRE: OGRE官方推出了最新 ...
- 【LG3238】 [HNOI2014]道路堵塞
题目描述 给你一张\(N\)个点.\(M\)条边的有向图,按顺序给定你一条有\(L\)条边的\(1\rightarrow n\)的最短路, 每次断掉这\(L\)条边中的一条(不对后面答案产生影响),求 ...
- superset 安装测试,基于windows 和 centos7.x
1.刚开始在windows平台测试搭建,报各种问题,搭建可以参考官网https://superset.incubator.apache.org/installation.html#deeper-sql ...
- Repo 的使用小结
一.安装 创建目录和修改环境变量 $ mkdir ~/bin $ PATH=~/bin:$PATH 下载repo代码 $ curl https://storage.googleapis.com/git ...
- Struts2(一.基本介绍,环境搭建及需求分析)
Struts2框架开发 前言 开发工具:eclipse struts1:老项目使用较多,维护时需要用到 struts2:新项目使用较多 一.特点 1. 无侵入式设计 struts2 与 struts ...
- HDU-1864:最大报销额(浮点数01背包)
链接:HDU-4055:最大报销额 题意:现有一笔经费可以报销一定额度的发票.允许报销的发票类型包括买图书(A类).文具(B类).差旅(C类),要求每张发票的总额不得超过1000元,每张发票上,单类物 ...
- Maven私库
<server> <id>releases</id> <username>admin</username> <password> ...