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