【题解】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)\)