警示后人
  • 板块P1908 逆序对
  • 楼主wjj255
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/7/21 18:03
  • 上次更新2023/10/27 19:03:32
查看原帖
警示后人
560342
wjj255楼主2022/7/21 18:03
#include<iostream>
using namespace std;
const int N=500005;
long long a[N],b[N],s;
void msort(int l,int r)
{
	if(l==r)return;
	long long mid=(l+r)/2;
	msort(l,mid);
	msort(mid+1,r);
	int i=l;int j=mid+1;int k=l;
	while(k<=r){
		if(j>r||i<=mid&&a[i]<a[j]){
			b[k++]=a[i++];
		}
		else{
			b[k++]=a[j++];
			s+=(long long)(mid-i+1);
		}
	}
	for(int i=l;i<=r;i++)a[i]=b[i];
}
int main()
{
	ios::sync_with_stdio(false);
	//freopen("P1908.in","r",stdin);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	msort(1,n);
	/*for(int i=1;i<=n;i++){
		cout<<a[i]<<' ';
	}*/
	cout<<s<<endl;
	return 0;
}

上述代码只有30分,但只要把

if(j>r||i<=mid&&a[i]<a[j])

改成

if(j>r||i<=mid&&a[i]<=a[j]){

就可以满分

2022/7/21 18:03
加载中...