POJ 3928 樹狀陣列

2022-03-21 10:34:21 字數 1068 閱讀 5112

題意 一條街上住著一群桌球員 每個人的rank都不一樣 每兩個人可以找乙個人做裁判打球 裁判不能比他們rank都低或都高 並且兩個人走到裁判家的總路程不能高於兩個人的距離

比賽中的三人 任何乙個人不同 都是不同的比賽 問最多多少場不同的比賽

也就是說裁判的rank在他們之間 並且家也在兩人之間

用樹狀陣列來解答

可知 這條街看作左右向的話 每個人做裁判的場次數相加就是總答案

這個人做裁判的次數=左邊比自己弱的人*右邊比自己強的人+左邊比自己強的人*右邊比自己弱的人

由於rank最多是10w 開的下 不用離散化什麼的

當輸入a[i]的時候(i從1~n)add之前 求一次sum 是這個人左邊比自己弱的人

i-1-sum 是這個人左邊比自己強的人

然後add

當所有的a[i]都輸入並且add完畢後

再對每個a[i]求sum sum-1-這個人左邊比自己弱的人=這個人右邊比自己弱的人

n-這個人左邊比自己弱的人-左邊比自己強的人-右邊比自己弱的人-1=右邊比自己強的人 

然後for迴圈求答案就可以了

需要注意的是最後的ans比較大 int會wa 開long long

#include#include#include#include#includeusing namespace std;

int c[100050];

int a[100050];

int xiaoyi[100050];

int xiaoer[100050];

int dayi[100050];

int daer[100050];

int n;

int lowbit(int x)

void add(int x)

}int sum(int x)

return ans;

}int main()

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

long long int ans=0;

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

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

}}

POJ 3928 樹狀陣列

2008年北京的現場賽的題出5了道 對比下當時的排名.盡然到12名了.至少拿銀.囧.或許是這幾年icpc發展太迅猛了吧.這題如果最暴力的.就是列舉中間的 j 看左邊有多少比 data j 小的.右邊有多少比 data j 大的.相乘加到答案中.再看左邊有多少比 data j 大的.右邊有多少比 da...

poj 3928 Ping pong 樹狀陣列

以裁判為基礎計算,每個運動員的技術水平都是不變的,他們對應的編號也是不變的,首先將它們按技術水平排序,但對應的編碼不變 如 技術 9 1 2 5 4 編碼 1 2 3 4 5 排序後 1 2 4 5 9 編碼 2 3 5 4 1 再找他們每個人的左邊 比他小的 有多少人,右邊 即比他大的 有多少人,...

POJ3928 Ping pong 樹狀陣列

題目中只n個人,每個人有乙個id和乙個技能值,一場比賽需要兩個選手和乙個裁判,只有當裁判的id和技能值都在兩個選手之間的時候才能進行一場比賽,現在問一共能組織多少場比賽。這道題目是用 樹狀陣列統計問題。首先我們要對技能值從小到大排序,然後利用每乙個選手的id對樹狀陣列進行維護。每次維護乙個id之前先...