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

CF竞赛题目讲解_CF961E(树状数组)

2022-07-27 12:30 作者:Clayton_Zhou  | 我要投稿

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


题意:给出一个序列a[i],下标1-N,求满足

(1) x < y 

(2) a[x] >= y 

(3) a[y] >= x的(x,y)数对有多少个。

 因为 a[y], 必须有 y<=N


题解:

先用vector储存满足条件(1)和(3)的y,再用树状数组统计满足条件的(x,y)数对个数。

vector[min(i - 1, a[i])].push_back(i);

 即满足条件(1)(3)的最大x 为min(y - 1, a[y])  等价于 x<y,且 x<= a[y]


对于满足条件(1)和(3)的y,查询x个数, x<=i, a[x] >= y 即条件(2)

            ans += sum(n) - sum(y- 1);



CF竞赛题目讲解_CF961E(树状数组)的评论 (共 条)

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