求助,玄关
  • 板块灌水区
  • 楼主tt12341234
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/8/17 12:19
  • 上次更新2024/8/17 15:18:18
查看原帖
求助,玄关
1291771
tt12341234楼主2024/8/17 12:19

题目:P1908 逆序对

请求大佬指导

代码如下(只有30分):

#include <bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int a[N],b[N]; 
long long sum=0;
void fun(int l,int r){
	if(l==r){
		return;
	}
	int mid=(l+r)/2;
	fun(l,mid);
	fun(mid+1,r);
	int l1=l,r1=mid;
	int l2=mid+1,r2=r;
	int cnt=l;
	while(l1<=r1&&l2<=r2){
		if(a[l1]<a[l2]){
			b[cnt++]=a[l1++];
		}else{
			b[cnt++]=a[l2++];
			sum+=mid-l1+1;
		}
	}
	while(l1<=r1){
		b[cnt++]=a[l1++];
	}
	while(l2<=r2){
		b[cnt++]=a[l2++];
	}
	for(int i=l;i<=r;i++){
		a[i]=b[i];
	}
}
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	fun(1,n);
	cout<<sum;
	return 0;
} 
2024/8/17 12:19
加载中...