題目傳送門
這道題與樹狀陣列求逆序對的思路有些近似,是一道樹狀陣列求字首的基礎題目。
我們列舉第i個人當裁判的話,假設a1到a[i-1]中有ci個比ai小,那麼就有(i-1)-ci個比ai大,同理,假設a[i+1]到an中有di個比ai小,那麼就有(n-i)-di個比ai大,然後根據乘法原理和加法原理,i當裁判有ci(n-i-di)+(i-ci-1)*di,這樣問題就轉化為求c,d的值
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rez(i,x,y) for(int i=x;i>=y;i--)
#define res(i,x,y) for(int i=x;i<=y;i++)
#define inf 2100000000
#define ll long long
#define clr(x) memset(x,0,sizeof(x))
using
namespace
std;
const
int egn = 100005;
const
int maxn = 100000 + 50;
int ti,n;
int num[maxn],x[maxn],c[maxn],d[maxn];
template
inline
void readin(t &res)
int lowbit(int x)
int sum(int x)
void add(int x)
clr(num);
for(int i=n;i>=1;i--)
for(int i=1;i<=n;i++)
cout
0;}
LA 4329 Ping pong 樹狀陣列
樹狀陣列的典型應用,參看 演算法筆記 475頁 對於有n個數的陣列 a a 1 a n 對於每乙個元素,求出序列中,它的左邊比它小的數的個數 本題要點 1 題目見,訓練指南 197 頁 2 ans 要用 long long 3 輸入的陣列個數最大值為 20000,每個 a i 的最大值為 10000...
LA4329 樹狀陣列
分析 考慮第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 ...
LA 4329(樹狀陣列)
演算法競賽入門經典 p197 題目大意 一條大街上住著n個桌球愛好者,經常比賽切磋技術。每個人都有乙個不同的技能值a i 每場比賽需要3個人 兩名選手,一名裁判。他們有個奇怪的約定,裁判必須住在兩名選手之間,而裁判的能力值也必須在兩名選手之間。問一共能組織多少種比賽。分析 假設a 1 到a i 1 ...