日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/4/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 #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 }

?

轉載于:https://www.cnblogs.com/Dragon-Light/p/6376947.html

總結

以上是生活随笔為你收集整理的UOJ【UR #12】实验室外的攻防战的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。