标签:le 洛谷 LnOI2019 sum 插入 去者 区间 operatorname left
题目描述
给定长度为 \(n\) 的序列 \(a\),给出 \(m\) 个询问。
对于每个询问,给出一个区间 \([l,r]\),求
\[\sum_{i=l}^{r}{\left(1+\sum_{j=l}^{r}{[a_j<a_i]}\right)a_i} \]数据范围:\(1\le n,m\le 5\times 10^5\),\(a_i\le 10^5\),\(1\le l \le r \le n\)。
时间范围:\(3000\operatorname{ms}\)。
Solution 1
看题目可以发现是求区间排名,求区间和显然不好在线维护,考虑莫队。
对于已有的区间 \([l,r]\),若向右插入一个元素,贡献为
\[\sum_{i=l}^{r}{[a_i>a_{r+1}]a_i}+a_{r+1}\left(1+\sum_{i=l}^{r}{[a_i<a_{r+1}]}\right) \]直接维护的复杂度为 \(\Theta(n\sqrt n\log a_{\max})\),期望得分 \(0\operatorname{pts}\)。
Solution 2
上边的带 \(\log\) 莫队是没有前途的,考虑二次离线。
考虑前缀和,向右插入一个元素,贡献为
\[\sum_{i=1}^{r}{[a_i>a_{r+1}]a_i}+a_{r+1}\left(1+\sum_{i=l}^{r}{[a_i<a_{r+1}]}\right)-\sum_{i=1}^{l-1}{[a_i>a_{r+1}]a_i}+a_{r+1}\left(1+\sum_{i=l}^{r}{[a_i<a_{r+1}]}\right) \]定义 \(f_r=\sum_{i=1}^{r}{[a_i>a_{r+1}]a_i}+a_{r+1}\left(1+\sum_{i=l}^{r}{[a_i<a_{r+1}]}\right)\),则贡献变为
\[f_r-\sum_{i=1}^{l-1}{[a_i>a_{r+1}]a_i}+a_{r+1}\left(1+\sum_{i=l}^{r}{[a_i<a_{r+1}]}\right) \]将 \(f\) 数组预处理出来,后边的贡献离线下来维护,套上值域分块即可处理。
向左插入同理。
时间复杂度为 \(\Theta((n+m)\sqrt {a_{\max}})\),加上奇特的卡常技巧,期望得分 \(100\operatorname{pts}\)。
Code
在写了。
标签:le,洛谷,LnOI2019,sum,插入,去者,区间,operatorname,left 来源: https://www.cnblogs.com/VCLS01/p/14766001.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。