題意:給出長度為n的序列,每次只能交換相鄰的兩個元素,問至少要交換幾次才使得該序列為遞增序列。
1.先對輸入的陣列離散化,使得各個元素比較接近,而不是離散的(a的操作就是離散化),
2.接著,運用樹狀陣列的標準操作來累計陣列的逆序數。
#include
<
iostream
>
#include
<
cstdio
>
#include
<
cmath
>
#include
<
string
>
#include
<
cstring
>
#include
<
stack
>
#include
<
algorithm
>
#include
<
iomanip
>
#include
<
map>
#include
<
queue
>
#include
<
vector
>
#include
<
set>
const
intinf
=0x3f3f3f3f;/
/1061109567
typedef
long
longll;
using
namespace
std;
const
intn
=500000+5
;lln,
m;inta[n
+5],
sum[n+
5];struct
nodes[
n];/
/修改void
add(
intp
,intx)
}int
ask(
intp
)return
ans;
}int
cmm(
nodex,
nodey)
intmain()
sort(s
+1,s
+1+n
,cmm);
for(
inti=1
;i<=n
;i++
)llans=0;
for(
inti=1
;i<=n
;i++
)cout
<
<
ans<
<
endl;}
}
樹狀陣列求逆序對(逆序數)
逆序數 也叫逆序對 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。無重複的數 include include include include include include using namespace...
求逆序數 逆序數 歸併排序
求排列的逆序數 分治 一 題目描述 總時間限制 1000ms 記憶體限制 65536kb 描述 在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1...
NYOJ 求逆序數
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就是...