樹狀陣列的典型應用, 參看 《演算法筆記》 475頁
對於有n個數的陣列 a(a[1] ~ a[n]), 對於每乙個元素,求出序列中,它的左邊比它小的數的個數
本題要點:
1、 題目見,《訓練指南》 197 頁
2、 ans 要用 long long
3、 輸入的陣列個數最大值為 20000, 每個 a[i] 的最大值為 100000,
**的 const int maxn = 100010 //如果 const int maxn = 20010, runtime error
#include
#include
#include
using
namespace std;
#define lowbit(i) ((i)&(-i))
// lowbit(x) 表示x的二進位制對應的值
const
int maxn =
100010
;int c[maxn]
;//陣列a的樹狀陣列, 下標,從1開始的
int d[maxn]
;//陣列 b的樹狀陣列
int n, test;
int a[maxn]
;int a_small[maxn]
;//陣列 a_small[i] 表示第i個數,其左邊比a[i] 小的元素個數
int b_small[maxn]
;//陣列 b_small[i] 表示第i個數,其左邊比b[i] 小的元素個數
//getsum()函式, 返回前x個數的和
intgetsum
(int x,
int* a)
return sum;
}//update()函式,將第x個數加上v
void
update
(int x,
int v,
int* a)
}int
main()
memset
(c,0
,sizeof
(c))
;for
(int i =
1; i <= n;
++i)
memset
(d,0
,sizeof
(d))
;for
(int i = n; i >=1;
--i)
long
long ans =0;
for(
int i =
2; i <= n -1;
++i)
printf
("%lld\n"
, ans);}
return0;
}/*13 1 2 3
*//*
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...
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 ...