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
logn)
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個。我們可以畫個圖幫助理解 將其推廣,若有逆...