POJ 3928 Ping pong 樹狀陣列

2021-08-26 03:17:08 字數 865 閱讀 3104

樹狀陣列的運用

具體就是列舉每個裁判,左邊比裁判小的個數乘以右邊比裁判大的個數,以及左邊比裁判大的個數乘以右邊小的個數,總和即為結果

/* id: sdj22251 prog: calfflac lang: c++ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define max 100000000 #define loca #define pi acos(-1.0) using namespace std; int a[100001], b[100001], data[100001]; int lowbit(int x) //返回二進位制下最右邊的1,用於樹狀陣列儲存和查詢時的結構 void calculate1(int x) //由於所有資料是獨一無二,並且在100000以內,所以將所有資料處理,用樹狀陣列a預存,所有能被x影響到的陣列均改變 void calculate2(int x) //列舉每個裁判時,乙個乙個的存入樹狀陣列b,方便對當前左側選手的查詢 __int64 sum1(int x) //計算所有資料中比裁判小的個數,從而推出比裁判大的個數 __int64 sum2(int x) //計算裁判左側比裁判小的個數,就能推出右側,從而推出大的個數 int main() __int64 ans = 0; calculate2(data[1]); for(i = 2; i < n; i++) printf("%i64d\n", ans); } return 0; }

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之前先...

POJ 3928 Ping pong(樹狀陣列)

題意 每個人都有乙個獨特的排名 數字大小 與獨特的位置 從前往後一條線上 求滿足排名在兩者之間並且位置也在兩者之間的三元組的個數 思路 單去列舉哪些數字在兩者之間只能用o n 3 時間太高,但是可以轉變思想。我們可以轉化為對於每個數字a,求出後面比當前數a大的每個數b,再求出數b後面比當前數b大的數...