题目地址:https://www.luogu.org/problem/P1774
题意:
求将一个序列变成下降的序列,所需要的最少交换次数(转化成求逆序对问题+离散化+long long)
ac代码:
树状数组法:
#include<bits/stdc++.h>
using namespace std;
const int maxn = 500015;
#define lowbit(x) ((x)&(-x))
int n;
long long c[maxn], a[maxn], b[maxn];
long long res;
void update(int x, int v)
{
for(int i = x; i <= n; i += lowbit(i))
c[i] += v;
}
long long getsum(int x)
{
long long ans = 0;
for(int i = x; i > 0; i -= lowbit(i))
ans += c[i];
return ans;
}
int main()
{
//freopen("/Users/zhangkanqi/Desktop/11.txt","r",stdin);
scanf("%d", &n);
for(int i = 1; i <= n; i++)
{
scanf("%lld", &a[i]);
b[i] = a[