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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hust1347(归并排序求逆序对)

發(fā)布時間:2025/3/15 编程问答 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hust1347(归并排序求逆序对) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題意:

給出一個數(shù)列,你要對這個數(shù)列的數(shù)字進(jìn)行k次交換操作,使得交換之后的數(shù)列逆序?qū)﹄m少。


思路:

求原數(shù)列的逆序?qū)?#xff0c;再和k比就行了。求逆序?qū)σ脷w并排序,因?yàn)闃錉顢?shù)組開不下。


代碼:

#include<cstdio> #include<cstring> #include<climits> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<string> #include<queue> #include<map> #include<vector> #include<set> #include<sstream>using namespace std;long long _count;int _left[2500003], _right[2500003];void merge(int* a, int p, int q, int r) {int i, j, k, n1, n2;n1 = q-p+1;n2 = r-q;for (i=0; i<n1; i++){_left[i] = a[p+i];}for (i=0; i<n2; i++){_right[i] = a[q+i+1];}_left[n1] = _right[n2] = 0x7fffffff;i = j = 0;for (k=p; k<=r; k++){if (_left[i] <= _right[j]){a[k] = _left[i];i++;}else{a[k] = _right[j];j++;_count += n1-i; /**此步驟是在歸并排序法中加的一句,用來計(jì)數(shù)求逆序數(shù)的數(shù)目**/}}return; }void mergesort(int* a, int p, int r) {int q;if (p < r){q = (p+r)/2;mergesort(a, p, q);mergesort(a, q+1, r);merge(a, p, q, r);}return ; }int a[1000005];int main() {int n,m;int cas=1;while(EOF != scanf("%d %d",&n, &m) ) {_count=0;for(int i = 0; i < n; i++) {scanf("%d",&a[i]);}mergesort(a,0,n-1);int ans;_count-=m;int flag=0;for(int i=1;i<n;i++){if(a[i]==a[i-1]){flag=1;break;}}if(_count<0){_count=-_count;if(_count%2==0)ans=0;elseif(flag)ans=0;elseans=1;}elseans=_count;printf("Case #%d: %d\n",cas++,ans);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hust1347(归并排序求逆序对)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。