题解 Yuno loves sqrt technology II】的更多相关文章

题目传送门 题目大意 有\(n\)个数,\(m\)个查询,每次查询一个区间内的逆序对个数. \(n,m\le 10^5\) 思路 其实是为了锻炼二次离线才做这道题的. 不难想到可以有一个\(\Theta(n\sqrt n\log n)\)的方法,即用莫队,每次用树状数组计算变化的贡献. 然后我们就可以想到二次离线了.我们考虑计算\([l,r]\to [l,r^{'}]\)的贡献,可以发现\([l,r]\to[l,r+1]\)变换的贡献就是\([l,r]\)中比\(a_{r+1}\)大的个数,差分…
二次离线 前置技能 莫队 修改查询 \(O(\sqrt n )-O(1)\) 平衡 概念 考虑朴素莫队离线询问,过程中维护信息从 \([l,r]\) 扩展为 \([l\pm 1,r\pm 1]\) ,本质上就是要询问共 \(O(n\sqrt m)\) 次形如第 \(r\) 个元素与区间 \([l,r-1]\) 产生的贡献. 当然,如果这个贡献可以差分为 \([1,r-1]\) 与 \(r\) 的贡献和 \([1,l-1]\) 与 \(r\) 的贡献,那么就可以尝试使用二次离线了. 具体的,我们发…
题目大意: 给定一个长为\(n\)的序列,\(m\)次询问,每次查询一个区间的逆序对数. 32MB. 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 二次离线莫队. 对于每个区间\([l,r]\),考虑将右端点向右移动1格. 其多出来的部分是\([l,r]\)与\(a_{r+1}\)产生的逆序对(\(a\)与\(b\)产生的逆序对和\(b\)与\(a\)产生的逆序对是不同的). 显然,可以把\([l,r]\)区间拆成\([1,r]-[1,l-1]\). 所以,\([l,r…
二次离线莫队. 终于懂了 \(lxl\) 大爷发明的二次离线莫队,\(\%\%\%lxl\) 二次离线莫队,顾名思义就是将莫队离线两次.那怎么离线两次呢? 每当我们将 \([l,r]\) 移动右端点到 \(a_{r+1}\) 的时候,发现贡献为 \([1,r]-[1,l-1]\) 对 \(a_{r+1}\). \([1,r]\) 对 \(a_{r+1}\) 的贡献可以 \(O(n\log n)\) 预处理出来,那么我们只需要处理 \([1,l-1]\) 对 \(a_{r+1}\) 的贡献. 那么…
题目大意:有$n(n\leqslant5\times10^5)$个数,$m(m\leqslant5\times10^5)$个询问,每个询问问区间$[l,r]$中众数的出现次数 题解:分块,设块大小为$S$,先可以预处理出两两块之间的众数出现次数,复杂度$O(\Big(\dfrac n S\Big)n)$.询问时先把答案设成整块内的答案,然后对两边剩下的最多$2S$个元素进行讨论. 难点在如何快速求出一个元素在区间内出现次数,先想到的是主席树,但是多了一个$\log_2$,并过不去.可以把每种数出…
题目描述 给你一个长为n的排列,m次询问,每次查询一个区间的逆序对数,强制在线. 题解 MD不卡了..TMD一点都卡不动. 强制在线的话也没啥好一点的方法,只能分块预处理了. 对于每个块,我们设lef[i]表示i到这个i这个元素所在块的块头的区间逆序对,rig[i]表示到块尾的逆序对. 在设一个cnt[i][j]表示从第i个块到第j个块的逆序对. 然后考虑如何处理询问. 整块之间的可以直接O(1)取答案,对于散块,我们需要求出散块内部的答案,散块对整块的答案,散块对散块的答案. 对于散块内的,因…
题目大意: 给你一个长为n的序列a,m次询问,每次查询一个区间的众数的出现次数,强制在线. 解题思路: 出题人题解 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 首先得离散化. 分块后,预处理Fi,j表示第i∼j块的众数的出现次数.此处要用一个桶,空间复杂度O(n),时间复杂度O(n√n). 用vector按顺序存每个数值所有元素的出现位置. 再记录每个元素在相应vector里的下标p. 以上空间复杂度都是O(n)的. 考虑询问,中间的直接使用预处理出的Fi,j的值即可.设当前的答案ans=F…
题意 长为 \(n\) 的序列,询问区间众数,强制在线. \(n\leq 5\times 10^5\). 分析 考虑分块,暴力统计出整块到整块之间的众数次数. 然后答案还可能出现在两边的两个独立的块中,开 \(vector\) 记录每种数字出现的位置集合,然后暴力判断两边两个块中的元素出现的次数.发现并不需要知道具体在 \([l,r]\) 内出现了多少次,而只需要知道 \([l,r]\) 中是否有 \(ans+1\)个该种颜色. 总时间复杂度为 \(O(n\sqrt n)\). 代码 #incl…
题目链接 洛谷. Solution 思路同[BZOJ2724] [Violet 6]蒲公英,只不过由于lxl过于毒瘤,我们有一些更巧妙的操作. 首先还是预处理\(f[l][r]\)表示\(l\sim r\)块的众数数量,注意这里不要求具体是什么,我们就有一些奇技淫巧了. 当然第一步还是离散化,对于权值为\(v\)的点,我们开一个\(vector\)来从小到大存这个权值在哪里出现过,在记个\(pos[i]\)表示\(i\)在$vector $内的下标是什么. 那么预处理\(f[l][r]\)的时候…
传送门 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 用蒲公英那个分块的方法做结果两天没卡过去→_→ 首先我们分块,预处理块与块之间的答案,然后每次询问的时候拆成整块和两边剩下的元素 整块的答案很简单,那么只有两边剩下的元素有可能更新答案 我们对于每一个元素用\(vector\)记录所有的出现位置,设\(dep_i\)为位置为\(i\)的元素在\(vector\)中的位置,那么如果\(a_i\)在这段区间中的出现次数超过\(res\),那么\(vector\)中第\(i+res\)个元素就要小…