【分析】:考慮第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...