代码实现
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int num[100001];
int n,a[100001];
long long count=0;
void add(int x){
for(int i=x;i<=n;i+=(i&-i))num[i]++;
}
void query(int p){
for(int i=p; i; i -= (i & -i))count+=num[i];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=n;i>=1;i--){
query(a[i]);
add(a[i]);
}
cout<<count;
}
反着做,也可正着做(求此数到n的区间和)
时间: 2024-11-06 13:40:00