【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组
2018-01-08 18:21
246 查看
题目描述
给出两个长度为 $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)$
给出两个长度为 $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 , b , f ; 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; }
相关文章推荐
- 【UR #12】实验室外的攻防战(BIT)
- UOJ180 【UR #12】实验室外的攻防战
- UOJ 180【UR #12】实验室外的攻防战
- UOJ【UR #12】实验室外的攻防战
- 解决UR 12后ISV目录不能用的问题
- 编程学习笔记12--树状数组的运用
- Codeforces 12D (线段树 树状数组
- 结论
- 2013 12 14晚的代码测试
- 12 php thinkphp cache,upload getfield 自動完成以及各方法大全
- 树状数组
- Java并发系列-12、-Java TheadLocal
- 12:变幻的矩阵
- 12球问题的java算法
- SCCM 2012 R2 从入门到精通 Part12 系统推送(3)
- ubuntu12 安装 apache2.4+php5.6+mysql5.6
- microstation level3 12 display depth
- 网上图书商城12--后台管理员模块
- 2017沈阳网络赛ping (树链剖分+树状数组)
- 12 Star Signs