hdu 1394 求逆序數

2021-06-27 21:47:04 字數 998 閱讀 9669

首先建立空樹,將 a[i] 逐個插入

計算乙個序列n排列的最小逆序數

首先用線段樹算出出事序列的逆序數,然後找規律推出排列的最小逆序數。

#include#include#include#include#include#include#include#include#include#include#include#include#include #include #include #include using namespace std;

#define max 5010

int a[5010];

int n;

int ans;

int sum;

struct

b[4 * max];

void build(int left, int right, int i)//建立空樹

void update(int value, int i)//更新第value個節點, 從跟節點1開始更新到葉子節點value

int mid = (b[i].left + b[i].right) / 2;

if (value <= mid)

update(value, i * 2);//左子樹

else

update(value, i * 2 + 1);//右子樹

b[i].num = b[i * 2].num + b[i * 2 + 1].num;//更新根節點

}int query(int id ,int n,int i)//計算有多少個

else

if (mid < n)

return ans1 + ans2; }}

int main()

ans = sum;

//printf("%d\n", ans);

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

printf("%d\n",ans);

} return 0;

}

HDU1394 求逆序數

hdu1394minimum inversion number 逆序數 a i 後面比它小的數的個數即為a i 的逆序數,題目要求的是序列的逆序數,求和即可 題意 乙個由0.n 1組成的序列,每次可以把隊首的元素移到隊尾,求形成的n個序列中最小逆序數 思路 乙個序列的逆序數可以用線段樹,或者暴力法求...

hdu 1394 線段樹求逆序數

線段樹求逆序數 求小逆序數 神奇 題意 給定乙個序列,對該序列的n種排列 排列如下 的每種排列 0 n 1 的逆序數求最小值 a1,a2,an 1,an a2,a3,an,a1 a3,a4,an,a1,a2 an,a1,a2,an 1 思路 先求出初始序列的逆序數,可以歸併,這裡用的是線段數求。設當...

hdu 1394 樹狀陣列求逆序數

解題思路 這道題是求迴圈陣列中逆序數最小值,求逆序數這裡肯定是用樹狀陣列。只是這裡有一點點變化,由於題目中n位數是0 n 1的乙個排列,所以num i 可表示為比num i 小的數的個數。把第一位的數挪到最後一位,那麼整個序列的逆序數變化為ans ans num 0 n 1 num 0 num 0 ...