【题解】ABC221E LEQ

https://atcoder.jp/contests/abc221/tasks/abc221_e

题意

给定一个长度为\(n\)的数列\(a_1,a_2,...a_n\),求有多少子序列(不一定连续)\(a_i,a_{i+1},...,a_{k}\),满足\(a_i\le a_k\)

\(n\le 3\times 10^5,a_i\le 10^9\)

解法

不难发现我们要计算的式子是\(\sum\limits_{i=1}^{n-1} \sum\limits_{j=i+1}^{n} 2^{j-i-1}\ (a_i\le a_j)\),考虑优化。

将贡献写为\(\frac{2^i}{2^{j+1}} = 2^i \cdot \frac{1}{2^{j+1}}\),就可以\(i,j\)分开。

对于第\(i\)个位置,记\(s=\sum\limits_{j=1}^{i-1} \frac{1}{2^j+1}\),则贡献为\(2^i \times s\)\(s\)用树状数组维护即可。

时间复杂度\(O(n\ log\ n)\)

posted @ 2021-10-11 11:50  hzy1  阅读(40)  评论(1编辑  收藏  举报