欢迎光临散文网 会员登陆 & 注册

CF竞赛题目讲解_CF61E(反序树状数组+反序树状数组)

2022-08-14 09:17 作者:Clayton_Zhou  | 我要投稿

 https://codeforces.com/contest/61/problem/E

题意: 

已知互不相同的整数序列a[1], a[2],..., a[n],  求 i<j<k 且 a[i]>a[j]>a[k] 的三元组个数

思路:

如果只有2元组即是求逆序对个数。

三元组的情形,先用一个树状数组x表示 大于a[i]且下标小于i的数据个数

再把x中大于a[i]且下标小于i的个数存入树状数组y中,存入位置为a[i]的顺序标号b0。


假设 树状数组y中大于顺序标号b的数据之和为y.sum(b),设b<b0, 且b0数据的下标小于b数据的下标。

 而x.sum(b0)表示大于b0的数据个数, 且这些数据的下标小于b0数据的下标,

 所以,y.sum(b) 为 a[k] > a[i] > a[j] 的三元组个数,其中a[j]的顺序标号b。

input

5

1 20 10 8 3 


CF竞赛题目讲解_CF61E(反序树状数组+反序树状数组)的评论 (共 条)

分享到微博请遵守国家法律