树状数组样例输出4,为什么??
  • 板块P1908 逆序对
  • 楼主luqyou
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/1/5 13:30
  • 上次更新2023/10/24 05:30:48
查看原帖
树状数组样例输出4,为什么??
464732
luqyou楼主2023/1/5 13:30
#include<bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
#define int long long 
using namespace std;
int n,a[100001],b[100001],c[100001],ans;
bool cmp(int x,int y){
	if(a[x]==a[y]) return x<y;
	return a[x]<a[y];
}
void add(int x){
	for(int i=x;i<=n;i+=lowbit(i)){
		c[i]++;
	}
}
int search(int x){
	int sum=0;
	for(int i=x;i;i-=lowbit(i)){
		sum+=c[i]; 
	}
	return sum;
}
signed main(){
	scanf("%lld",&n);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		b[i]=i;
	}
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=n;i++){
		add(b[i]);
		ans+=search(b[i]-1);
	}
	printf("%lld",ans);
	return 0;
}
2023/1/5 13:30
加载中...