UVA1428 Ping pong 樹狀陣列

2021-06-25 23:25:39 字數 914 閱讀 4638

uva1428 - ping pong(樹狀陣列)

題目鏈結

題目大意:有n個人,每個人都有乙個技能值ai,現在要開展桌球比賽,要求要有兩個選手和乙個裁判,要求裁判需要在兩名選手的中間而且技能值也是在兩名選手的中間,問可以開展多少場比賽。

解題思路:對於第i個選手當裁判的話,設它前面位置的選手有ci個技能值比它低的,那麼就有i - 1 - ci個比它高的,對於第i選手後面的位置,同樣有di個技能值比它低的,那麼就有n - i - di個比它高的。組合一下:ci

∗(n - i - di) + (i - 1 - ci)

∗ di.那麼對於ci的值,根據i的位置,將xi標為0或者1(在i位置前面就是1,後面就是0)。di類似求得。

**:

#include

#include

const

int maxn = 1e5 + 5;

const

int n = 2e4 + 5;

typedef

long

long ll;

int c[maxn];

int a[maxn];

ll c[n], d[n];

int lowbit(int x)

void add (int x, int d)

}int sum (int x)

return ret;

}void init ()

int main ()

init();

for (int i = n - 1; i >= 0; i--)

ll ans = 0;

for (int i = 0; i < n; i++)

printf ("%lld\n", ans);

}return

0;}

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...

UVA1428 Ping pong 樹狀陣列

傳送門 思路 權值樹狀陣列。考慮列舉每個位置作為裁判對答案的貢獻。顯然有兩種情況 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 ...