求助
  • 板块P1908 逆序对
  • 楼主xiaobei10
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/8/4 10:44
  • 上次更新2024/8/4 12:09:30
查看原帖
求助
1052827
xiaobei10楼主2024/8/4 10:44
#include<bits/stdc++.h>
using namespace std;

const int N=5e6+5;
int n,a[N],b[N],c[N]; 
long long t[N];

int lowbit(int x){
	return x&(-x);
}

void modify(int x,int y){
	for(int i=x;i<=n;i+=lowbit(i)){
		t[i]+=y;
	}
}

long long query(int x) { 
	long long res=0;
	for(int i=x;i>0;i=i-lowbit(i)){
		res+=t[i];
	}
	return res;
}

int main(){
	
	cin>>n;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)b[i]=a[i];
	sort(a+1,a+n+1);
	int cnt=unique(a+1,a+n+1)-a-1;
	for (int i = 1; i <= n; i++) {
		a[i] = lower_bound(a + 1, a + cnt + 1, b[i]) - a;
	}
	
	long long ans=0;
	for(int i=1;i<=n;i++){
		ans=ans+query(cnt)-query(a[i]);
		modify(a[i],i);
	} 
	cout<<ans<<"\n";
	
	return 0;
}
2024/8/4 10:44
加载中...