(一)
题意转化为求 \(i<j\) 且 $a_j\le a_i $ 的有序对 \((i,j)\) 数。
二维偏序,容易想到用树状数组或归并排序做。
(二)
AC 代码(树状数组)。
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,t,tree[200010],a[200010];
int lowbit(int x){
return x&-x;
}
void add(int x){
for(;x<=n;x+=lowbit(x))tree[x]++;
}
int query(int x){
int ans=0;
for(;x;x-=lowbit(x))ans+=tree[x];
return ans;
}
signed main(){
scanf("%lld",&t);
while(t--){
scanf("%lld",&n);
for(int i=1;i<=n;i++)tree[i]=0,scanf("%lld",&a[i]);
int ans=0;
for(int i=n;i>=1;i--){
ans+=query(a[i]);
add(a[i]);
}
printf("%lld\n",ans);
}
return 0;
}
标签:int,题解,long,200010,ans,CF1676H2
From: https://www.cnblogs.com/Jh763878/p/18098705