hdu 1394 樹狀陣列求逆序數

2021-07-10 11:56:39 字數 691 閱讀 4387

解題思路:這道題是求迴圈陣列中逆序數最小值,求逆序數這裡肯定是用樹狀陣列。只是這裡有一點點變化,由於題目中n位數是0-n-1的乙個排列,所以num[i]可表示為比num[i]小的數的個數。把第一位的數挪到最後一位,那麼整個序列的逆序數變化為ans =ans -  num[0] + (n-1-num[0]),num[0]表示後面的n-1位對逆序數的貢獻,n-1-num[0]表示把最後一位挪過來對逆序數所作出的貢獻。由於最小是為0,所以更新樹狀陣列時多加個1。。

#include#include#include#includeusing namespace std;

const int maxn = 5005;

int num[maxn];

int n,tree[maxn<<2];

int lowbit(int x)

void update(int x,int d)

}int getsum(int x)

return sum;

}int main()

int ans = 0;

for(int i = 1; i <= n; i++)

int min = ans;

for(int i = 1; i <= n; i++)

cout << min << endl;

} return 0;

}

HDU 1394 樹狀陣列求逆序數

題意 給你n個數,每次將其第乙個元素放後面,要你算出這期間所產生的最小逆序數。題解 首先用樹狀陣列求出原序列所產生的逆序數,然後根據性質算出公式sum n a i 1 a i 具體結合 更好理解。include include include using namespace std const in...

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