HDU 1394 樹狀陣列求逆序數

2021-08-18 05:26:03 字數 481 閱讀 6928

題意:

給你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個序列中最小逆序數 思路 乙個序列的逆序數可以用線段樹,或者暴力法求...