LA4329 樹狀陣列

2021-08-09 03:33:28 字數 840 閱讀 7481

【分析】:考慮第i個人當裁判。假設前i-1個人中有ci個比ai小,那麼就有(i-1)-ci個比ai大;同理,設i+1到n有di個比ai小,那麼就有(n-i)-di個比ai大。所以i當裁判有 ci(n-i-di

)+ (i-ci-1)di種比賽。問題轉換為求ci和di。

ci可以這麼計算:從左到右掃瞄所有的ai,令x[j]表示目前為止已考慮過的所有ai中,是否存在乙個ai=j(0表示沒有,1表示有)。ci即為x[1]+x[2]+...+x[ai-1]. 初始化所有x[i]=0.計算ci,先設x[ai]=1,然後求字首和。

**如下:

#include #include #include using namespace std;

typedef long long ll;

const int maxn = 2e4+10;

const int maxm = 1e5+10;

ll ans;

int a[maxn],x[maxm],c[maxn],d[maxn];

int n;

int lowbit(int d)

int sum(int id)

return s;

}void add(int id, int d)

}void init()

memset(x,0,sizeof(x));

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

}int main()

return 0;

}

LA 4329(樹狀陣列)

演算法競賽入門經典 p197 題目大意 一條大街上住著n個桌球愛好者,經常比賽切磋技術。每個人都有乙個不同的技能值a i 每場比賽需要3個人 兩名選手,一名裁判。他們有個奇怪的約定,裁判必須住在兩名選手之間,而裁判的能力值也必須在兩名選手之間。問一共能組織多少種比賽。分析 假設a 1 到a i 1 ...

LA 4329 Ping pong 樹狀陣列

題目傳送門 這道題與樹狀陣列求逆序對的思路有些近似,是一道樹狀陣列求字首的基礎題目。我們列舉第i個人當裁判的話,假設a1到a i 1 中有ci個比ai小,那麼就有 i 1 ci個比ai大,同理,假設a i 1 到an中有di個比ai小,那麼就有 n i di個比ai大,然後根據乘法原理和加法原理,i...

LA 4329 Ping pong 樹狀陣列

樹狀陣列的典型應用,參看 演算法筆記 475頁 對於有n個數的陣列 a a 1 a n 對於每乙個元素,求出序列中,它的左邊比它小的數的個數 本題要點 1 題目見,訓練指南 197 頁 2 ans 要用 long long 3 輸入的陣列個數最大值為 20000,每個 a i 的最大值為 10000...