hdu5273 n次查詢求逆序數對

2021-07-03 09:48:03 字數 903 閱讀 5279

題目大意:給定乙個陣列a[n],輸入q次查詢(如b,c),輸出從a[b] 到a[c] 從在多少逆序數對

n只有

1000

,剛開始居然n^3,一直沒想到,就在那裡推一維陣列,二維的閃現了一下但是忽略了。

仔細一想發現可以很簡單地做到n2

.設dp[l][r]表示從l~r的逆序對數量。首先我們暴力地先算好dp[

1][1..n]

。然後i

從2∼n

列舉,每次計算從i

開始的逆序對。

那麼dp[i][j]

比dp[i-1][j]

少了什麼呢?沒錯,少了a[

i−1]

這個數的貢獻。

我們再開乙個累加器cn

t 。列舉j 從

i∼n

,如果a[i-1]和a[j]構成逆序數,則cnt--;

最後dp[i

][j]

=dp[i

−1][

j]+c

nt[j

] 。預處理完所有的答案就可以o(

1)的詢問啦

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

int dp[1005][1005];

int a[1005];

int cnt[1005];

int main()

dp[1][i] += dp[1][i-1];

}for(int i = 2 ; i <= n ; i ++ )

}for(int i = 0 ; i < q ; i ++ )

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

求N個元素的逆序數

求n個元素的逆序數 解法一 窮舉,時間複雜度為o n2 解法二 使用歸併排序計算逆序數,時間複雜度o n lngn 使用分治思想,以mid值將序列分為左序列 left mid 右序列 mid 1 right 將左右子串行排序好之後,進行合併。合併時獲得逆序數,因為左序列已經保證有序,當右序列的值小於...