題意 一條街上住著一群桌球員 每個人的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之前先...