51nod 1019 逆序數(樹狀陣列)

2021-07-30 08:57:10 字數 813 閱讀 6461

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。

如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。

input

第1行:n,n為序列的長度(n <= 50000)

第2 - n + 1行:序列中的元素(0 <= a[i] <= 10^9)

output

輸出逆序數

input示例

4 2

4 3

1output示例

用樹狀陣列優化查詢!

#include

#include

#include

using

namespace

std;

int n,c[50005],a[50005];

struct nodes[50005];

int lowbit(int x)

void update(int t,int v)

int getsum(int x)

int cmp(node a,node b)

sort(s+1,s+n+1,cmp);

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

a[s[i].num]=i;

memset(c,0,sizeof(c));

long

long ans=0;

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

cout

0;}

51nod 1019 逆序數(逆序數 離散化)

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。input 第1行 n,n為序列的長度 n 5000...

51Nod 1019 逆序數 分治

51nod 1019 逆序數 分治法 如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。收起第1行 n,n為序列的長...

逆序數 51nod 1019 歸併 分治

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。input 第1行 n,n為序列的長度 n 5000...