UVA1428 Ping pong 樹狀陣列

2021-10-07 13:14:03 字數 1815 閱讀 5220

傳送門

思路:權值樹狀陣列。

考慮列舉每個位置作為裁判對答案的貢獻。

顯然有兩種情況:

1. a[

l]

i]

r],l

<

i<

r1.a[l]1.

a[l]

i]r],l

<

i2. a[

l]

>a[

i]

>a[

r],l

<

i<

r2.a[l]>a[i]>a[r],l2.

a[l]

>a[

i]>a[

r],l

<

i因為每個數互異。

根據乘法原理所以貢獻為:llo

wer[

i]×r

uppe

r[i]

+lup

per[

i]×r

lowe

r[i]

l_[i]\times r_[i]+l_[i]\times r_[i]

llower

​[i]

×rup

per​

[i]+

lupp

er​[

i]×r

lowe

r​[i

] 且題目資料a[i

]≤1e

5a[i]\leq 1e5

a[i]≤1

e5.所以可以用權值樹狀陣列來維護。

#include

#include

#include

using

namespace std;

typedef

long

long ll;

const

int n=

2e4+

5,m=

1e5+

5,inf=

0x3f3f3f3f

,mod=

1e9+7;

#define mst(a) memset(a,0,sizeof a)

#define lx x<<1

#define rx x<<1|1

#define reg register

#define pii pair

#define fi first

#define se second

int t,n,a[n]

,tr[m]

;int l_up[n]

,l_low[n]

,r_up[n]

,r_low[n]

;#define lowbit(x) x&(-x)

void

update

(int x,

int k)

}ll query

(int x)

return ans;

}int

main()

for(

int i=

1;i<=

1e5;i++

) tr[i]=0

; ll ans=0;

for(

int i=n;i>=

1;i--

)for

(int i=

1;i<=

1e5;i++

) tr[i]=0

;printf

("%lld\n"

,ans);}

return0;

}

UVA1428 Ping pong 樹狀陣列

uva1428 ping pong 樹狀陣列 題目鏈結 題目大意 有n個人,每個人都有乙個技能值ai,現在要開展桌球比賽,要求要有兩個選手和乙個裁判,要求裁判需要在兩名選手的中間而且技能值也是在兩名選手的中間,問可以開展多少場比賽。解題思路 對於第i個選手當裁判的話,設它前面位置的選手有ci個技能值...

uva 1428 Ping pong (樹狀陣列)

題意 一條街道上有n個選手,他們要打桌球賽,每個人有乙個自己的skill rank,且是n個不同的數。每場比賽需要乙個裁判,要求這個裁判的skill rank不能高於也不能低於這兩個選手,且在街上住的位置必須在兩個選手之間。問可以組織多少場比賽。開始想到了可以用樹狀陣列處理每個人前面有多少sr sk...

UVA 1428 Ping Pong 樹狀陣列

取low min a i 1 i n up max a i 1 i n 那麼區間就是,那麼只要統計出當前a i 左邊有多少比他小的,右邊有多少比他小的即可,因為給出的序列是有順序的,所以在加入需要加入乙個統計乙個,如果先全部加入了,那麼則會導致統計結果變大。include include inclu...