[HNOI2016]序列(莫队,RMQ)】的更多相关文章

[HNOI2016]序列(莫队,RMQ) 洛谷  bzoj 一眼看不出来怎么用数据结构维护 然后还没修改 所以考虑莫队 以$(l,r-1) -> (l,r)$为例 对答案的贡献是$\Sigma_{i=l}^{r}minval(a[i:r])$ 考虑维护前缀和 先用单调栈扫出$w[i]$作为最小值的左边界右边界$l_i,r_i$ 然后回到上面的例子贡献就是$frontsum_{r}-frontsum_{rmqmin(l,r)}+w[rmqmin(l,r)]*(rmqmin(l,r)-l+1)$ 完…
BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\(l,r\),求\(\sum\limits_{i=l}^r\sum\limits_{j=i}^r\min\{A_i,A_{i+1},...,A_j\}\). \(n,q\leq10^5\). \(Solution\) 莫队: 这种区间询问问题考虑一下莫队. 考虑移动右端点\(r\to r+1\)的时候…
4540: [Hnoi2016]序列 题意:询问区间所有子串的最小值的和 不强制在线当然上莫队啦 但是没想出来,因为不知道该维护当前区间的什么信息,维护前后缀最小值的话不好做 想到单调栈求一下,但是对于\([l,r]\)还是可能有很多最小值,数据不随机的话会被卡 预处理!!! 预处理\(l_i,\ r_i\)以i为最小值的范围,\(fl[i],\ fr[i]\)为从i开始 / 以i结尾的的前缀 / 后缀 最小值的和 \(fr[i] = (i - l_i + 1) * a_i + fr[i] -…
[BZOJ4540][Hnoi2016]序列 Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列.现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和.例如,给定序列5,2,4,1,3,询问给定的两个数为1和3,那么a[1:3]有6个子序列a[1:1],a[2:2],a[3…
4540: [Hnoi2016]序列 Time Limit: 20 Sec  Memory Limit: 512 MB Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列.现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和.例如,给定序列5,2,4,1,3,询问给定的两个…
Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列.现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和.例如,给定序列5,2,4,1,3,询问给定的两个数为1和3,那么a[1:3]有6个子序列a[1:1],a[2:2],a[3:3],a[1:2],a[2:3],a[1:3…
传送门 思路 看到可离线.无修改.区间询问,相信一定可以想到莫队. 然而,莫队怎么转移是个大问题. 考虑\([l,r]\rightarrow[l,r+1]\)时答案会怎样变化?(左端点变化时同理) \(ans+=\sum_{i=l}^r \min\{a_i,a_{i+1} ,\dots ,a_r\}\). 那么这东西如何快速统计呢? 考虑使用前缀和. 首先,显然要用单调栈预处理每个点左边最靠右的第一个比它小的数的位置\(L_i\),和ST表处理出RMQ的位置. 预处理出对于每一个\(r\),\(…
题目: 给定长度为n的序列:a1,a2,-,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,-,ar- 1,ar.若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列.现在有q个询问,每个询问给定两个数l和r,1≤l≤r ≤n,求a[l:r]的不同子序列的最小值之和.例如,给定序列5,2,4,1,3,询问给定的两个数为1和3,那么a[1:3]有 6个子序列a[1:1],a[2:2],a[3:3],a[1:2],a[2:3],a[1:3],这6个…
传送门 BZOJ 4540 题解 --怎么说呢--本来想写线段树+矩阵乘法的-- --但是嘛--yali的机房太热了--困--写不出来-- 于是弃疗,写起了莫队.(但是我连莫队都想不出来!) 首先用单调栈可以轻松求出每个元素左右两边第一个比它小的元素位置,分别设为tl[i].tr[i]. 莫队关键就是在一端插入/删除元素时如何维护当前区间的答案嘛,而这就需要快速计算当前区间左/右端点对当前区间的贡献. 下面以在左边插入一个元素为例,设插入后区间是[l, r]. 插入这个元素的时候,新增的区间显然…
序列 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n]. 类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar. 若1≤l≤s≤t≤r≤n,则称a[s:t]是a[l:r]的子序列. 现在有q个询问,每个询问给定两个数l和r,1≤l≤r≤n,求a[l:r]的不同子序列的最小值之和. 例如,给定序列5,2,…