UOJUR #12实验室外的攻防战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UOJUR #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 #include<cstdio>
 3 #include<algorithm>
 4 #include<vector>
 5 #include<cstdlib>
 6 #include<cmath>
 7 #include<cstring>
 8 using namespace std;
 9 #define maxn 20000010
10 #define MAXN 2000100
11 #define llg int 
12 #define inf 0x7fffffff
13 #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
14 llg n,m,minl[maxn],a[MAXN],c[MAXN],rank[MAXN];
15 
16 llg min_(llg o,llg l,llg r,llg L,llg R)
17 {
18     if (l>=L && r<=R)
19     {
20         return minl[o];
21     }
22     llg lc=o<<1,rc=o<<1|1,mid=(l+r)>>1;
23     llg ans=inf;
24     if (L<=mid) ans=min(ans,min_(lc,l,mid,L,R));
25     if (R>mid) ans=min(ans,min_(rc,mid+1,r,L,R));
26     return ans;
27 }
28 
29 void add(llg o,llg l,llg r,llg wz,llg val)
30 {
31     if (l==r)
32     {
33         minl[o]=val;
34         return ;
35     }
36     llg lc=o<<1,rc=o<<1|1,mid=(l+r)>>1;
37     if (wz<=mid) add(lc,l,mid,wz,val);
38     if (wz>mid) add(rc,mid+1,r,wz,val);
39     minl[o]=min(minl[lc],minl[rc]);
40 }
41 inline int getint()
42 {
43        int w=0,q=0;
44        char c=getchar();
45        while((c<0 || c>9) && c!=-) c=getchar();
46        if (c==-)  q=1, c=getchar();
47        while (c>=0 && c<=9) w=w*10+c-0, c=getchar();
48        return q ? -w : w;
49 }
50 int main()
51 {
52     //yyj("C");
53     cin>>n;
54     for (llg i=1;i<=n;i++) a[i]=getint();
55     for (llg i=1;i<=n;i++) c[i]=getint();
56     for (llg i=1;i<=n;i++) rank[c[i]]=i;
57     for (llg i=1;i<=20000000;i++) minl[i]=inf;
58     for (llg i=1;i<=n;i++)
59     {
60         llg x=rank[a[i]];
61         llg v=min_(1,1,n,x,n);
62         if (a[i]>v) {cout<<"NO"; return 0;}
63         add(1,1,n,x,a[i]);
64     }
65     cout<<"YES";
66     return 0;
67 }

 

以上是关于UOJUR #12实验室外的攻防战的主要内容,如果未能解决你的问题,请参考以下文章

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

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

《网络攻防》第十周作业

2017-2018-2 20179204《网络攻防实践》缓冲区溢出漏洞实验

2017-2018-2 20179205《网络攻防技术与实践》第十周作业 缓冲区溢出攻防研究

2017-2018-2 20179223《网络攻防技术》第十周作业