LGOJ P5463 小魚比可愛

2021-09-26 03:26:31 字數 3146 閱讀 9001

by zhongzijun

\text

zhongzijun

這是小魚比可愛加強版

給你乙個正整數 n

nn 和乙個序列 a

1a_1

a1​ ~ a

na_n

an​ 。

定義 f(i

,j

)f(i,j)

f(i,j)

表示序列 a

aa 在 [l,

r]

[l,r]

[l,r

] 內的逆序對對數。 現在請你求出:

∑ i=

1n∑j

=i+1

nf(i

,j

)\sum_^n\sum_^f(i,j)

∑i=1n​

∑j=i

+1n​

f(i,

j)

其中 1≤n

≤106

,1≤a

i≤10

91 \leq n \leq 10^6,1 \leq a_i \leq 10^9

1≤n≤10

6,1≤

ai​≤

109 。

時間限制 2s2s

2s, 空間限制 256mb

256mb

256mb 。

考慮使用離散化權值線段樹來解題。

考慮一對逆序對 l

ll 和 r

rr ,它所產生的貢獻是 l×(

n−r+

1)

l\times(n-r+1)

l×(n−r

+1) 。

顯然所有 l

ll 的和可以用權值線段樹來維護。

考慮到 1≤a

i≤10

91 \leq a_i \leq 10^9

1≤ai​≤

109 ,所以要先把序列 a

aa離散化一下。

考慮到答案會很大,所以存答案的那個變數要開__int128,其他的變數要開long long

記得要注意__int128的輸出。

時間複雜度 o(n

log⁡n)

o(n\;\log\;n)

o(nlogn)

。然後這道題目就做完了,具體的細節見**部分。

#include

#include

struct node tree[

2100001];

long

long a[

1000001

],b[

1000001

],d[

1000001];

long

long lenb=

0,lend=

0,len=0;

inline

long

long

read()

while

(isdigit

(ch)

) x=

(x<<3)

+(x<<1)

+(ch^48)

,ch=

getchar()

;return w?

-x:x;

}inline

void

print

(__int128 x)

if(x>9)

print

(x/10);

putchar

(x%10

+'0');

}voidbt(

long

long l,

long

long r)

}void

change

(long

long now,

long

long x,

long

long t)

long

long mid=

(tree[now]

.l+tree[now]

.r)/2;

if(x<=mid)

else

tree[now]

.c=tree[tree[now]

.lc]

.c+tree[tree[now]

.rc]

.c;}

long

long

findsum

(long

long now,

long

long l,

long

long r)

long

long mid=

(tree[now]

.l+tree[now]

.r)/2;

if(r<=mid)

else

if(mid+

1<=l)

else

}voidpx(

long

long l,

long

long r)

while

(b[y]

>mid)

if(x<=y)}if

(lif(x}long

long

find

(long

long x)

else

}return l;

}int

main()

px(1,lenb)

;for

(long

long i=

1;i<=lenb;i++)}

for(

long

long i=

1;i<=n;i++)}

bt(1,ma+1)

;change(1

,a[1],

1);for

(long

long i=

2;i<=n;i++

)print

(ans)

;return0;

}

小魚比可愛

人比人,氣死人 魚比魚,難死魚。小魚最近參加了乙個 比可愛 比賽,比的是每只魚的可愛程度。參賽的魚被從左到右排成一排,頭都朝向左邊,然後每只魚會得到乙個整數數值,表示這只魚的可愛程度,很顯然整數越大,表示這只魚越可愛,而且任意兩隻魚的可愛程度 color red 可能一樣 color 由於所有的魚頭...

小魚比可愛 題解

題目 題目描述 人比人,氣死人 魚比魚,難死魚。小魚最近參加了乙個 比可愛 比賽,比的是每只魚的可愛程度。參賽的魚被從左到右排成一排,頭都朝向左邊,然後每只魚會得到乙個整數數值,表示這只魚的可愛程度,很顯然整數越大,表示這只魚越可愛,而且任意兩隻魚的可愛程度可能一樣。由於所有的魚頭都朝向左邊,所以每...

洛谷P5463 小魚比可愛(加強版) 題解

寫部落格不易,來玩會?歸併排序求逆序對大家應該很清楚了,我這裡就來講講如何用歸併排序求出這道題的答案 讓我們先觀察一下規律 舉個栗子,若存在一組逆序對a 3 a 4 n 5,則這組逆序對存在於以下區間內 1 4 1 5 2 4 2 5 3 4 3 5 共6個。我們可以畫個圖幫助理解 將其推廣,若有逆...