【51nod】【树状数组】 小陶与杠铃片
题目
解题思路
要将后面轻的往前放,其实就是求逆序对
得出前面有多少比当前小的,剩下的与当前构成逆序对
代码
#include<iostream>
#include<cstdio>
using namespace std;
const int N=200001;
int n,x;
long long tree[210000],ans;
void add(int x)
{
for (;x<=N;x+=x&(-x))
tree[x]++;
}
long sum(int x)
{
long long ans=0;
for (;x;x-=x&(-x))
ans+=tree[x];
return ans;
}
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&x);
x++;
ans+=i-1-sum(x);
add(x);
}
printf("%lld\n",ans);
return 0;
}