社区讨论

35分求助

P1908逆序对参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@lo1yi0qk
此快照首次捕获于
2023/10/23 05:03
2 年前
此快照最后确认于
2023/11/03 05:29
2 年前
查看原帖
死因做法:树状数组
代码:
CPP
#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;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...