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);