35分求助
  • 板块P1908 逆序对
  • 楼主Gohldg
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/8/7 09:11
  • 上次更新2023/11/3 05:29:21
查看原帖
35分求助
757214
Gohldg楼主2023/8/7 09:11

死因做法:树状数组

代码:

#include <iostream>
#include <algorithm>
using namespace std;
#define int long long
int a[500001];
int b[500001];
int c[500001];
int n,m,x,y,ans;
int lowbit(int x){
	return (x&(-x));
}
int sum(int x){
    int num=0;
    for(int i=x;i>=1;i=i-lowbit(i)){
        num+=c[i];
	}
    return num;
}
bool cmp(int x,int y){
	return b[x]>b[y];
}
//int ask(int x,int y){
//	return sum(y)-sum(x-1);
//}
void add(int x,int y){
    for(int i=x;i<=n;i=i+lowbit(i)){
        c[i]+=y;
	}
}
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>b[i];
		a[i]=i;
	}
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++){
		add(a[i],1);
		ans+=sum(a[i]-1);
    }
    cout <<ans;
    return 0;
}
2023/8/7 09:11
加载中...