POJ 3928 樹狀陣列

2021-06-09 12:55:12 字數 1036 閱讀 1753

2023年北京的現場賽的題出5了道~~對比下當時的排名..盡然到12名了..至少拿銀..囧...或許是這幾年icpc發展太迅猛了吧....

這題如果最暴力的..就是列舉中間的 j ..看左邊有多少比 data[j] 小的...右邊有多少比 data[j]  大的...相乘加到答案中..再看左邊有多少比 data[j] 大的...右邊有多少比 data[j] 大的..相乘加到答案中...那麼問題關鍵就是如何在可以接受的時間內得到某位左邊有多少個比它小(大)...右邊有多少比它大(小)的...

這裡可以用兩個樹狀陣列來維護...乙個記錄的是到了k位有多少個比k小的..乙個記錄到k位有多少個比k大的...那麼預處理要知道每位的數是第幾大的..我分別用兩個陣列記錄每一位它是第幾大和它是第幾小..在掃中間數前..兩個樹狀陣列都是空的(全0)..邊掃邊更新兩個樹狀陣列..

program:

#include#include#include#include#include#include#include#include#define ll long long

#define oo 1000000000

#define pi acos(-1)

using namespace std;

struct node

p[20005];

int n,a[20005],b[20005],s[2][20005];

ll ans;

bool cmp(node a,node b)

return w;

} int main()

sort(p+1,p+1+n,cmp);

for (i=1;i<=n;i++) a[p[i].w]=i;

for (i=1;i<=n;i++) b[p[i].w]=n-i+1;

ans=0;

memset(s,0,sizeof(s));

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

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

}return 0;

}

POJ 3928 樹狀陣列

題意 一條街上住著一群桌球員 每個人的rank都不一樣 每兩個人可以找乙個人做裁判打球 裁判不能比他們rank都低或都高 並且兩個人走到裁判家的總路程不能高於兩個人的距離 比賽中的三人 任何乙個人不同 都是不同的比賽 問最多多少場不同的比賽 也就是說裁判的rank在他們之間 並且家也在兩人之間 用樹...

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