HDU 4911 Inversion
程序员文章站
2022-03-03 08:53:23
...
HDU 4911 Inversion
归并排序
求逆序对数量
AC代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<sstream>
#include<string.h>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<set>
#include<map>
#include<queue>
#include<vector>
using namespace std;
#define ll long long
const ll inf=0x3f3f3f3f;
typedef pair<int ,int > PII;
const int maxn=1e5+10;
ll a[maxn],b[maxn],cnt;
void merge(ll l,ll mid ,ll r){
ll i=l,j=mid+1,t=0;
while(i<=mid&j<=r){
if(a[i]>a[j]){
b[t++]=a[j++];
cnt+=mid-i+1;
}else{
b[t++]=a[i++];
}
}
while(i<=mid)b[t++]=a[i++];
while(j<=r)b[t++]=a[j++];
for(i= 0; i<t;i++)a[l+i]=b[i];
}
void mergesort(ll l ,ll r){
if(l<r){
ll mid=(l+r)/2;
mergesort(l,mid);
mergesort(mid+1,r);
merge(l,mid,r);
}
}
int main(){
#define io
#ifdef io
freopen("in.txt","r",stdin);
#endif
ll n,k;
while(~scanf("%lld%lld",&n,&k)){
cnt=0;
for(ll i=0;i<n;i++)scanf("%lld",&a[i]);
mergesort(0,n-1);
if(cnt<=k)cout<<0<<endl;
else printf("%lld\n",cnt-k);
}
return 0;
}
推荐阅读
-
HDU6315 Naive Operations(线段树 复杂度分析)
-
【题解】hdu1506 Largest Rectangle in a Histogram
-
C - Monkey and Banana HDU 1069( 动态规划+叠放长方体)
-
HDU 1052(田忌赛马 贪心)
-
hdu-1338 game predictions(贪心题)
-
致初学者(四):HDU 2044~2050 递推专项习题解
-
C语言BFS--Find a way(Hdu 2612)
-
『ACM C++』HDU杭电OJ | 1425 - sort (排序函数的特殊应用)
-
【hdu5527】【2015ACM/ICPC亚洲区长春站 】Too Rich
-
HDU 1142 A Walk Through the Forest (记忆化搜索+Dijkstra算法)