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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【洛谷P1966】火柴排队

發布時間:2023/11/30 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【洛谷P1966】火柴排队 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩列排序后將編號一一對應

歸并排序求逆序對

(每一次交換就去掉一個逆序對)

1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define ll long long 5 using namespace std; 6 const int N=100100; 7 const ll P=99999997; 8 ll tmp[N],ss[N],ans,n; 9 struct fx{ 10 ll w; 11 int id; 12 }a[N],b[N]; 13 bool cmp(fx p,fx q){ 14 return p.w<q.w; 15 } 16 ll read(){ 17 ll sum=0; 18 char ch=getchar(); 19 while (ch<'0'||ch>'9') 20 ch=getchar(); 21 while (ch>='0'&&ch<='9'){ 22 sum=sum*10+ch-'0'; 23 ch=getchar(); 24 } 25 return sum; 26 } 27 void mergesort(int l,int r){ 28 if(l==r) 29 return; 30 int m=(l+r)>>1; 31 mergesort(l,m); 32 mergesort(m+1,r); 33 int i=l; 34 int j=m+1; 35 int k=l; 36 while (i<=m&&j<=r){ 37 if (ss[i]<ss[j]){ 38 tmp[k]=ss[i]; 39 i++; 40 k++; 41 } 42 else{ 43 ans=(ans+m-i+1)%P;//區間內逆序對個數 44 tmp[k]=ss[j]; 45 j++; 46 k++; 47 } 48 } 49 while (i<=m){ 50 tmp[k]=ss[i]; 51 k++; 52 i++; 53 } 54 while (j<=r){ 55 tmp[k]=ss[j]; 56 k++; 57 j++; 58 } 59 for (int i=l;i<=r;i++){ 60 ss[i]=tmp[i]; 61 } 62 } 63 int main(){ 64 ans=0; 65 n=read(); 66 for (int i=1;i<=n;i++){ 67 a[i].w=read(); 68 a[i].id=i; 69 } 70 for (int i=1;i<=n;i++){ 71 b[i].w=read(); 72 b[i].id=i; 73 } 74 sort(a+1,a+n+1,cmp); 75 sort(b+1,b+n+1,cmp); 76 for (int i=1;i<=n;i++) 77 ss[a[i].id]=b[i].id; 78 mergesort(1,n); 79 printf("%lld",ans%P); 80 return 0; 81 } STD

?

轉載于:https://www.cnblogs.com/Absolute-Zero/p/6013878.html

總結

以上是生活随笔為你收集整理的【洛谷P1966】火柴排队的全部內容,希望文章能夠幫你解決所遇到的問題。

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