树状数组35pts 求助
查看原帖
树状数组35pts 求助
232507
OK咯莫名其妙楼主2021/7/20 15:17
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+10;
long long n,ans;
long long c[maxn];

struct node{
	long long num,val;
};
node a[maxn];
long long lowbit(long long x){
	return x&(-x);
}
long long add(long long x,long long k)
{
    for(long long i=x;i<=n;i+=i&(-i)) c[i]+=k;
}
long long query(long long x)
{
    long long sum=0;
    for(long long i=x;i>0;i-=i&(-i)) sum+=c[i];
    return sum;
}
long long cmp(node a,node b){
	return a.val>b.val;
}
int main(){
	cin>>n;
	for(long long i=1;i<=n;i++)
		cin>>a[i].val,a[i].num=i;
	sort(a+1,a+n+1,cmp);
	for(long long i=1;i<=n;i++){
		add(a[i].num,1);
		ans+=query(a[i].num-1);
	}
	cout<<ans<<endl;
	return 0;
}
2021/7/20 15:17
加载中...