【UR #12】实验室外的攻防战(BIT)

【题目链接】

http://uoj.ac/problem/180

【题意】

给定两个1..n的排列AB,只有当ai<ai+1才能交换ai和ai+1,问是否能够将A转换为B。

【思路】

令a[i]表示i在A中的出现位置,b[i]表示i在B中的出现位置。

若满足i<j,且不存在a[i]<a[j]&&b[i]>a[j]则输出YES,否则输出NO。

用个树状数组维护最大值即可判断。

【证明】

  

【代码】

 1 #include<set>
 2 #include<cmath>
 3 #include<queue>
 4 #include<vector>
 5 #include<cstdio>
 6 #include<cstring>
 7 #include<iostream>
 8 #include<algorithm>
 9 #define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
10 #define FOR(a,b,c) for(int a=(b);a<=(c);a++)
11 using namespace std;
12
13 typedef long long ll;
14 const int N = 2e5+10;
15
16 ll read() {
17     char c=getchar();
18     ll f=1,x=0;
19     while(!isdigit(c)) {
20         if(c==‘-‘) f=-1; c=getchar();
21     }
22     while(isdigit(c))
23         x=x*10+c-‘0‘,c=getchar();
24     return x*f;
25 }
26
27 int a[N],b[N],X[N];
28 int n;
29
30 int C[N];
31 void upd(int x,int v)
32 {
33     for(;x<=n;x+=x&-x)
34         C[x]=max(C[x],v);
35 }
36 int query(int x)
37 {
38     int res=0;
39     for(;x;x-=x&-x)
40         res=max(res,C[x]);
41     return res;
42 }
43
44 int main()
45 {
46     n=read();
47     FOR(i,1,n) {
48         X[i]=read();
49         a[X[i]]=i;
50     }
51     FOR(i,1,n) {
52         X[i]=read();
53         b[X[i]]=i;
54     }
55     FOR(i,1,n) {
56         int x=query(a[i]);
57         if(b[i]<x) { puts("NO"); return 0; }
58         upd(a[i],b[i]);
59     }
60     puts("YES");
61     return 0;
62 }

P.S. UOJ 棒棒哒~

时间: 2024-10-12 21:18:30

【UR #12】实验室外的攻防战(BIT)的相关文章

[UOJ #180][UR #12]实验室外的攻防战(树状数组)

Description 时针指向午夜十二点,约定的日子——2月28日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 picks 博士所在的实验室. 当然,picks 博士不会坐以待毙,他早就率领着他的猴子们在实验室外修筑了许多的坚固防御工事. 经过跳蚤侦察兵的勘察,跳蚤国王发现 picks 博士的防御工事有着 n 处薄弱点,于是他把他的跳蚤大军分成了 n 支小队,并打算让它们分别进攻每一个薄弱点.但是因为战场混乱,这 n 支小队的位置被打乱了,重新整队之后,跳蚤国王发现第 i

DDoS攻防战 (二) :CC攻击工具实现与防御理论

故上兵伐谋 其次伐交 其次伐兵 其下攻城 攻城之法 为不得已 知己知彼 百战不殆 不知彼而知己 一胜一负 不知彼不知己 每战必败 --孙子兵法·谋攻 我们将要实现一个进行应用层DDoS攻击的工具,综合考虑,CC攻击方式是最佳选择,并用bash shell脚本来快速实现并验证这一工具,并在最后,讨论如何防御来自应用层的DDoS攻击. 第一步:获取大量可用代理ip:port列表   网上所处可见免费代理,我们使用http的GET方法抓取html文档,接着使用正则过滤出我们需要的ip port对,然后

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

汤之盘铭曰 苟日新 日日新 又日新 康诰曰 作新民   诗曰 周虽旧邦 其命维新   是故 君子无所不用其极  ——礼记·大学 在上一篇文章<DDoS攻防战 (二) :CC攻击工具实现与防御理论>中,笔者阐述了一个防御状态机,它可用来抵御来自应用层的DDoS攻击,但是该状态机依赖一个能应对大量条目快速增删的ip黑白名单防火墙,我们目前并没有发现很好的开源实现以供我们使用. ·实现方案选择: 硬件实现或者软件实现? 在面对诸如大量畸形包这样的攻击时,硬件实现将会是非常好的选择,这是因为在进行此类

LINUX下SYN攻防战 [转]

LINUX下SYN攻防战        (一)SYN攻击原理SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费服务器CPU和内存资源.SYN攻击聊了能影响主机外,还可以危害路由器,防火墙等网络系统,事实上SYN攻击并不管目标是什么系统,只要这些系统打开TCP服务就可以实施.我们知道,在网络中两台电脑建立TCP连接时需要进行三次握手过程,客户端首先向服务器发关TCP SYN数据包,接着服务器会向客户端发关相应的SYN ACK数据包,最后客户端会以ACK进行响应.从

DDoS攻防战 (一) : 概述

岁寒 然后知松柏之后凋也 --论语·子罕 (此图摘自<Web脚本攻击与防御技术核心剖析>一书,作者:郝永清先生)    DDoS,即 Distributed Denial of Service ,可译为分散式阻断服务攻击. 上图与DDoS的字面已经清楚的表述出了此类攻击的原理,勿需多言.这类攻击泛滥存在的主要原因之一是网络服务的开放性,这一特点导致了DDoS攻击无法根本杜绝,目前主要应对策略是积极防御与消极防御. 典型DDoS的攻击方式:     ·死亡之Ping icmp封装于IP报文之中,

信息安全技术 实验五 网络攻防技术 20155202 张旭

信息安全技术 实验五 网络攻防技术 20155202 练习一 信息收集 一. 实验目的 该实验为验证性实验. ? 了解信息搜集的一般步骤 ? 学会熟练使用ping命令 ? 学会利用Nmap等工具进行信息搜集 二. 实验内容 Ping探测 Nmap扫描 探测总结 注:详细实验操作请参考实验室服务器上的参考资料. 三. 实验步骤 本练习主机A.B为一组,C.D为一组,E.F为一组.实验角色说明如下: 实验主机 实验角色 系统环境 A.C.E 扫描源/目标 Windows B.D.F 扫描源/目标 L

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

题意: 给出一个排列$A$,问是否能够经过以下若干次变换变为排列$B$ 变换:若${A_i> A_i+1}$,可以${swap(A_i,A_i+1)}$ 考虑一个数字从A排列到B排列连出来的路径与其他数字是否相交,相交就表示大小关系需要判断,(类似于二维偏序)用线段树维护区间最小值即可. 权值为1,2的线分别与权值为4的线相交,而且4在它们左边,所以需要判断它们的大小关系,发现${4>1}$,${4>2}$,所以满足条件. 1 #include<iostream> 2 #in

uoj180 【UR #12】实验室外的攻防战

题目 我们发现对于排列\(A\)中,一组\(i<j,a_i<a_j\),那么我们不可能通过交换把\(a_j\)换到\(a_i\)前面 但是一组\(i<j,a_i>a_j\),我们却可以通过交换使得\(a_j\)更靠前,也就是我们在\(A\)中的交换只能消除一些逆序对,而不能产生新的逆序对 于是我们想要得到排列\(B\),必须使得\(B\)中的任意一个逆序对在\(A\)中也是逆序的,否则就不可能通过交换使得\(A\)变成\(B\):即一旦\(B\)中一个逆序对在\(A\)中是顺序的,

嵌入式软件设计第12实验报告-140201133-李宇昕

学号:140201133                   姓名:李宇昕 组别:第3组           实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程与嵌入式设备进行交互的方法. 二.实验内容: 1.编写程序把嵌入式开发板采集到的温度信息通过GSM短信传送给指定号码.(每10秒发送1次) 2.编写程序,使手机可以通过短信指令的方式控制嵌入式开发板的蜂鸣器和LED灯.(比如手机编辑"BEEP_ON"和"BEEP_OFF"控制嵌入式开发板的蜂鸣器)