題意:
給你n個數,每次將其第乙個元素放後面,要你算出這期間所產生的最小逆序數。
題解:
首先用樹狀陣列求出原序列所產生的逆序數,然後根據性質算出公式sum+=(n-a[i]-1)-a[i];具體結合**更好理解。
#include
#include
#include
using
namespace
std;
const
int maxn=5000+7;
int c[maxn];
int a[maxn],n;
int lowbit(int x)
void add(int x)
}int getsum(int x)
int main()
int ans=sum;
for(int i=1;i<=n;i++)
}
hdu 1394 樹狀陣列求逆序數
解題思路 這道題是求迴圈陣列中逆序數最小值,求逆序數這裡肯定是用樹狀陣列。只是這裡有一點點變化,由於題目中n位數是0 n 1的乙個排列,所以num i 可表示為比num i 小的數的個數。把第一位的數挪到最後一位,那麼整個序列的逆序數變化為ans ans num 0 n 1 num 0 num 0 ...
hdu 1394 求逆序數
首先建立空樹,將 a i 逐個插入 計算乙個序列n排列的最小逆序數 首先用線段樹算出出事序列的逆序數,然後找規律推出排列的最小逆序數。include include include include include include include include include include inc...
HDU1394 求逆序數
hdu1394minimum inversion number 逆序數 a i 後面比它小的數的個數即為a i 的逆序數,題目要求的是序列的逆序數,求和即可 題意 乙個由0.n 1組成的序列,每次可以把隊首的元素移到隊尾,求形成的n個序列中最小逆序數 思路 乙個序列的逆序數可以用線段樹,或者暴力法求...