题目描述

给出两个长度为 $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;
}

转载于:https://www.cnblogs.com/GXZlegend/p/8244100.html

【uoj#180】[UR #12]实验室外的攻防战 结论题+树状数组相关推荐

  1. 【2018.12.15】【考试总结】【模拟+逆序对+树状数组+贪心+multiset】爆零之旅

    这是我悲惨的接近爆零的一次考试,但是本蒟蒻不能放弃,还是要总结的QAQ 答题卡 [题目背景] 八月是个悲惨的月份.先不谈炎热的天气,对于新生来说,八月意味着军训: 而对于高二高三的同学来说,八月意味着 ...

  2. 洛谷P3688/uoj#291. [ZJOI2017]树状数组

    传送门(uoj) 传送门(洛谷) 这里是题解以及我的卡常数历程 话说后面那几组数据莫不是lxl出的这么毒 首先不难发现这个东西把查询前缀和变成了查询后缀和,结果就是查了\([l-1,r-1]\)的区间 ...

  3. UOJ【UR #12】实验室外的攻防战

    题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径 ...

  4. 牛客小白月赛12 F 华华开始学信息学 (分块+树状数组)

    链接:https://ac.nowcoder.com/acm/contest/392/F 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 32768K,其他语言65536 ...

  5. 【UOJ 50】树状数组2

    Description 如题,已知一个数列(下标从1开始计数),你需要进行下面两种操作: 1.将某区间每一个数,加上x 2.获取某一个数的值 Input 第一行包含两个整数N.M,分别表示该数列数字的 ...

  6. codeforces test #12 C. Subsequences 树状数组统计

    C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. SUG 180 Inversions(树状数组+离散化)

    题意: 求逆序数的个数,因为题目没说是从1-n,所以要离散化. 心得: 这题wa了好多次,是因为询问时 query(order[i]-1) 写错成 query(order[i]). AC代码 #inc ...

  8. [队内测试Day10.12]贪心+状压+分块+树状数组

    T1 codevs2169零用钱 正解贪心. 在使用钞票最少前提下保证浪费的钱数最少 保证第一条,在还没达到规定钱数时尽可能使用大面值钞票 保证第二条,在现有钞票不满足要求前提下,尽量选面值小的放 综 ...

  9. DDoS攻防战(三):ip黑白名单防火墙frdev的原理与实现

    汤之盘铭曰 苟日新 日日新 又日新 康诰曰 作新民   诗曰 周虽旧邦 其命维新   是故 君子无所不用其极  --礼记·大学 在上一篇文章<DDoS攻防战 (二) :CC攻击工具实现与防御理论 ...

最新文章

  1. Android 系统自带 Theme(主题)
  2. Eclipse安装Perl插件
  3. Spring 框架基础(03):核心思想 IOC 编程说明,案例演示
  4. 共享平台上租了辆路虎 逾期归还 结果悲剧了...
  5. 不能编辑_解决cass9.0双击不能编辑文字和图块
  6. 《UG NX8.0中文版完全自学手册》一2.4 布局
  7. 怎样通过Java程序提交yarn的mapreduce计算任务
  8. 整合xfire与struts2 (一)
  9. Bootstrap入门!
  10. 双向绑定 当obj的值修改时_Vue3为什么选择Proxy做双向绑定?
  11. gimp 抠图_自动抠图工具,不用懂PS,还可以批量抠图
  12. IDEA安装后双击打开无任何反应
  13. linux定时情况root mail,Linux_Linux系统下mail命令使用,我经常用root帐号登录RHEL5,在 - phpStudy...
  14. 计算机辅助设计在口腔医学中的应用,椅旁CAD/CAM技术在口腔修复中的应用
  15. cc++语言参考手册_C ++值类别快速参考:第2部分
  16. 三姬分金/四姬分金/五姬分金(海盗分金币)等经典博弈论问题
  17. OpenSSL SSL_read: Connection was reset, errno 10054
  18. 基于matlab GUI Powell+蚁群算法图像配准
  19. 函的红头文件格式制作_浙江省水利厅红头文件函模板范例
  20. CTF - MISC安全杂项解题事项

热门文章

  1. MySql大数据量恢复
  2. 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置(转)
  3. 第二届360杯全国大学生信息安全技术大赛部分解题思路(加密解密题)
  4. 【转贴】CSS Sticky Footer: 完美的CSS绝对底部
  5. 【totti】一道weblogic认证考题所想到的
  6. 计算机网络—路由器(Cisco Packet Tracer)常用的命令总结
  7. 银行打电话不接有影响吗?
  8. 为什么有些WIFI不能用万能钥匙搜索到?怎么才能破解邻居家的WIFI密码?
  9. “云手机”是否会成为未来的主流?
  10. 现在实体店的生意越来越不好干