codevs1688 求逆序對 權值線段樹

2022-04-06 02:31:44 字數 1177 閱讀 1205

時間限制: 1 s

空間限制: 128000 kb

題目等級 : ** gold

題解檢視執行結果

給定乙個序列a1,a2,…,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目

資料範圍:n<=105。ai<=105。時間限制為1s。

輸入描述 input description

第一行為n,表示序列長度,接下來的n行,第i+1行表示序列中的第i個數。

輸出描述 output description

所有逆序對總數.

樣例輸入 sample input

樣例輸出 sample output

/*

權值線段樹模板

首先我們更改線段樹葉子節點處儲存的內容,將其更改為權值,並且記錄對於乙個權值x的個數。

那麼我們首先構建一棵空樹,

對於每次插入的數字x,我們查詢x+1到max區間的數字存在的個數,並將這個個數加入答案,

然後插入這個數字。最後輸出答案就可以了。。

*/#include

#include

#include

#define n 200007

using

namespace

std;

intn,x;

long

long

ans;

struct

tree

tr[n

<<2

];void push_up(int

now)

void build(int now,int l,int

r)void insert(int now,intk)

int mid=(tr[now].l+tr[now].r)>>1

;

if(x>mid) insert(now<<1|1

,k);

if(x<=mid) insert(now<<1

,k);

push_up(now);

}long

long gets(int now,int l,int

r)int

main()

printf(

"%lld\n

",ans);

return0;

}

CODEVS 1688 求逆序對

題目描述 description 給定乙個序列a1,a2,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目 資料範圍 n 10 5。ai 10 5。時間限制為1s。輸入描述 input description 第一行為n,表示序列長度,接下來的n行,第i 1行表示序列中的第i個數。輸出描述...

CodeVS1688 求逆序對

給定乙個序列a1,a2,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目 第一行為n,表示序列長度,接下來的n行,第i 1行表示序列中的第i個數。所有逆序對總數.資料範圍 n 105。ai 105。時間限制為1s。歸併排序,合併的時候,如果a i a j 那麼a i mid a j 所以給...

AC日記 codevs 1688 求逆序對

時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解檢視執行結果 給定乙個序列a1,a2,an,如果存在iaj,那麼我們稱之為逆序對,求逆序對的數目 資料範圍 n 105。ai 105。時間限制為1s。輸入描述 input description 第一行為n,表示序列長度,接下來...