【題意
】:
\color
【題意】
:erwin
最近對一種叫thair
的東西巨感興趣……
在含有n
nn個整數的序列a1,
a2..
.a
na_1,a_2...a_n
a1,a2
...
an中,
三個數被稱作thair
當且僅當i
<
j
i<
ji
a_iai
。
求乙個序列中thair
的個數。
【 思路
】:
\color
【思路】
: 像這種,考慮三個數之間的關係的題目,我們可以從中間元素入手。
記l ef
ti
left_i
lefti
表示第i
ii個數左邊小於它的數的個數,rig
ht
iright_i
righti
表示第i
ii個數右邊大於它的數的個數。不難發現,總答案ans
ansan
s滿足:
a ns
=∑i=
1nle
fti×
righ
ti
ans=\sum\limits_^left_i \times right_i
ans=i=
1∑n
left
i×r
ight
i既然如此,我們就可以用樹狀數
組\color
樹狀陣列
來求出lef
tleft
left
和r ig
ht
right
righ
t。總的時間複雜度為o(n
×logn
)o(n \times \log n)
o(n×
logn)。
需要注意的是,因為a
aa的取值範圍太大,所以我們先要對它進行離散化
\color
離散化。
【 程式碼
】:
\color
【程式碼】
:
const
int n=
30100
;struct nodea[n]
;int n,m,c[2]
[n];
inline
bool
cmp1
(node a,node b)
inline
bool
cmp2
(node a,node b)
inline
intf
(int x)
//相當於樹狀陣列的lowbit函式
typedef
long
long ll;
inline
void
updata
(int x,
int p)
//樹狀陣列的修改操作
inline
intquery
(int x,
int p)
//樹狀陣列的求字首和操作
int left[n]
,right[n]
;ll ans;
intmain()
// 從第33行到第40行為離散化操作
sort
(a+1
,a+n+
1,cmp1)
; a[1]
.number=1;
for(
int i=
2;i<=n;i++)if
(a[i]
.num!=a[i-1]
.num)
a[i]
.number=a[i-1]
.number+1;
else a[i]
.number=a[i-1]
.number;
m=a[n]
.number;
sort
(a+1
,a+n+
1,cmp2)
;for
(int i=
1;i<=n;i++
)//求left陣列
for(
int i=n;i;i--
)//求right陣列,通過減法把求大於乙個數的數的個數操作轉化為了求小於該數的數的個數的操作
for(
int i=
1;i<=n;i++
)//計算ans,注意中間結果不要溢位
ans+
=(ll)left[i]
*right[i]
;printf
("%lld"
,ans)
;return0;
}
2019 08 18 日常總結
一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...
5059日常總結
1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...
2019 10 01日常總結
前言 今天是祖國母親70歲生日,請允許我向祖國母親說一聲 生日快樂!願您永遠繁榮昌盛 山清水秀!題意 松鼠的新家是一棵樹,前幾天剛剛裝修了新家,新家有n nn個房間,並且有n 1 n 1n 1根樹枝連線,每個房間都可以相互到達,且倆個房間之間的路線都是唯一的。天哪,他居然真的住在 樹 上。松鼠想邀請...