樹狀陣列 hdu2492 Ping pong

2021-07-04 10:59:36 字數 1099 閱讀 7291

如果是列舉參加比賽的人,,那麼列舉起來就非常的複雜了

如果是列舉裁判,,題目會變得簡單很多

假如裁判是第i個人,那麼參加比賽的肯定分別在i的左邊和i的右邊

那麼我就可以統計[1,i-1]這個區間內有多個人的rank小於等於i,[i+1,n]這個區間內有多少人的rank大於等於i,兩者相乘,就是左邊小於等於右邊大於等於的情況

在考慮[1,i-1]這個區間內有多個人的rank大於i,[i+1,n]這個區間內有多少人的rank小於i,兩者相乘,就是左邊大於等於右邊小於等於的情況

兩種情況相加,就是全部情況了

這題突然就轉換成了求逆序對了~

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

typedef long long ll;

typedef pairpii;

const int mx = 1e5 + 5;

const int inf = 0x3f3f3f3f;

int s[mx], a[mx], max, n;

int lmin[mx], lmax[mx], rmin[mx], rmax[mx];

int sum(int x)

return ret;

}int query(int l, int r)

void update(int x, int d)

}int main()

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

update(a[1], 1);

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

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

update(a[n], 1);

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

ll ans = 0;

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

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

}return 0;

}

HDU 2492 Ping pong 樹狀陣列

題目大意 一條大街上住著 n 個桌球愛好者,經常比賽切磋技術,每個人有乙個不同的技能值ai。每場比賽需要三個人,兩名選手,一名裁判。但是裁判必須住在兩名選手之間,而且裁判的技能值不能小於或小於兩名選手的技能值。問共有多少種比賽。思路 列舉裁判,找出位於裁判前面的比裁判技能小的人數和位於裁判後面技能比...

樹狀陣列 POJ2492 Ping Pong

題意 按順序給定一些人和能量值。問按照順序選人,中間人能量值在兩邊人能量值的中間,問最多有多少種選法 思路 一次ac 有木有!其實是照著書上題解的思路打的。設c i 為某a i 處左邊能量值比他小的人數和,d i 為右邊能量值比他大的人數和,然後乙個簡單公式即可。關鍵是怎樣快速的求c i 以a i ...

hdu 3887 樹狀陣列

給你一棵樹,每個節點都有個編號。讓你求乙個節點他的子樹中編號比他小的節點有幾個。編號唯一,從1 n,已給出根節點 解 樹狀陣列統計。轉化為線性序列。可以想到的是,若要統計乙個節點,那麼比它小的孩子必須先插完,然後統計就行了。對於乙個節點i來說,只要把所有x那麼對於所有節點來說也是這樣的,從一開始插,...