1908-逆序对(归并板子)
Posted darlingroot
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1908-逆序对(归并板子)相关的知识,希望对你有一定的参考价值。
很早很早以前的题了
今天突然开心
就来补一片题解
主要还是写归并排序的
#include<cstdio>
#define ll long long
using namespace std;
const int maxn=5e5+5;
int a[maxn],r[maxn],n;
ll ans=0;
void msort(int s,int t)
{
if(s==t)
return;
int mid=s+t>>1;
msort(s,mid),msort(mid+1,t);
int i=s,j=mid+1,k=s;
while(i<=mid&&j<=t)
if(a[i]<=a[j])
r[k++]=a[i++];
else
r[k++]=a[j++],ans+=(ll)mid-i+1;
while(i<=mid)
r[k]=a[i],k++,i++;
while(j<=t)
r[k]=a[j],k++,j++;
for(int i=s;i<=t;i++)
a[i]=r[i];
}
inline int read()
{
char ch=getchar();
int sum=0,k=1;
while(ch<‘0‘||ch>‘9‘)
{
if(ch==‘-‘)
k=-1;
ch=getchar();
}
while(ch>=‘0‘&&ch<=‘9‘)
sum=sum*10+(ch^48),ch=getchar();
return sum*k;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
a[i]=read();
msort(1,n);
printf("%lld
",ans);
return 0;
}
以上是关于1908-逆序对(归并板子)的主要内容,如果未能解决你的问题,请参考以下文章