【发布时间】:2020-11-15 00:39:54
【问题描述】:
代码如下:
#include<iostream>
using namespace std;
const int MX = 100;
int n,a[MX*2],bit[MX];
void add(int x, int y){
for(;x<=n; x+=-x&x) bit[x]+=y;
}
int query(int x){
int s= 0;
for(;x>0; x-=-x&x) s+=bit[x];
return s;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int ans = 0;
cin >> n; n*=2;
for(int i = 0; i<n; i++){
cin >> a[i];
}
for(int i = n-1; ~i; i--){
ans+=query(a[i]-1);
add(a[i],1);
}
cout << ans;
}
我不明白查询和添加如何有助于查找数组中的反转数。如果有人可以帮助向我解释这一点,那就太好了。谢谢。
【问题讨论】:
-
这是一个糟糕的混淆代码。不要花时间去理解它。
-
...如果你想理解它,打印出位模式。