求助:为什么一个点都不对?
#include<bits/stdc++.h>
using namespace std;
//typedef long long lld;
struct var
{
int val;
int id;
var(){}
};
bool cmp(var a,var b)
{
if(a.val==b.val)
return a.id<b.id;
return a.val<b.val;
}
var a[500005];int n;
int c[500005];
int arr[500005];
int lowbit(int x)
{return x&-x;}
void update(int pos)
{
while(pos<=500005)
{
++c[pos];
pos+=lowbit(pos);
}
}
int summ(int pos)
{
int ret=0;
while(pos)
{
ret+=c[pos];
pos-=lowbit(pos);
}
return ret;
}
int main()
{
cin>>n;//输入
for(int i=1;i<=n;++i)
{
cin>>a[i].val;
a[i].id=i;
}
//离散化
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;++i)
{
a[i].val=i;
arr[a[i].id]=a[i].val;
}
//树状数组
int ans=0;
for(int i=1;i<=n;++i)
{
update(arr[i]);
ans+=summ(arr[i-1]);
}
cout<<n*(n-1)/2-ans;
}