题目大意:有$n(n\leqslant5\times10^5)$个数,$m(m\leqslant5\times10^5)$个询问,每个询问问区间$[l,r]$中众数的出现次数 题解:分块,设块大小为$S$,先可以预处理出两两块之间的众数出现次数,复杂度$O(\Big(\dfrac n S\Big)n)$.询问时先把答案设成整块内的答案,然后对两边剩下的最多$2S$个元素进行讨论. 难点在如何快速求出一个元素在区间内出现次数,先想到的是主席树,但是多了一个$\log_2$,并过不去.可以把每种数出…
传送门 众所周知lxl是个毒瘤,Ynoi道道都是神仙题 用蒲公英那个分块的方法做结果两天没卡过去→_→ 首先我们分块,预处理块与块之间的答案,然后每次询问的时候拆成整块和两边剩下的元素 整块的答案很简单,那么只有两边剩下的元素有可能更新答案 我们对于每一个元素用\(vector\)记录所有的出现位置,设\(dep_i\)为位置为\(i\)的元素在\(vector\)中的位置,那么如果\(a_i\)在这段区间中的出现次数超过\(res\),那么\(vector\)中第\(i+res\)个元素就要小…
题面传送门 qwq 感觉跟很多年前做过的一道题思路差不多罢,结果我竟然没想起那道题?!!所以说我 wtcl/wq 首先将 \(a_i\) 离散化. 如果允许离线那显然一遍莫队就能解决,复杂度 \(n\sqrt{n}\). 那如果强制在线怎么办呢? 既然离线都只能做到 \(n\sqrt{n}\),那在线肯定至少 \(n\sqrt{n}\) 咯 考虑将原序列分块,我们预处理处 \(mx_{i,j}\) 表示第 \(i\) 块开头到第 \(j\) 块结尾的区间中出现次数最多的值的出现次数.这个显然可以…
洛谷题面传送门 zszz,lxl 出的 DS 都是卡常题( 首先由于此题强制在线,因此考虑分块,我们那么待查询区间 \([l,r]\) 可以很自然地被分为三个部分: 左散块 中间的整块 右散块 那么这样一来区间逆序对的来源可以有以下几种: 左散块内部的区间逆序对 右散块内部的区间逆序对 每个整块内部的区间逆序对 左散块与中间整块之间的逆序对 右散块与中间整块之间的逆序对 中间整块两两之间的逆序对 左散块与右散块之间的逆序对 对于前三种情况,我们可以记录这样两个数组: \(pre_j\):\(j\…
这才是真正的$N\sqrt{N}$吧$qwq$ 记录每个数$vl$出现的位置$s[vl]$,和每个数$a[i]=vl$是第几个$vl$,记为$P[i]$,然后预处理出块$[i,j]$区间的答案$f[i][j]$; 对于$[l,r]$,现将$ans$设为$[l,r]$中整块的答案:对于散块,将散块中的每个数$a[i]=vl$,有对应的$P[i]$,我们用$s[vl]$检查第$P[i]+ans+1$个$vl$对应的位置是否在$[l,r]$,如果在的话就更新答案$ans=ans+1$,并重复上述过程,…
为什么我感觉这题难度虚高啊-- 区间众数的出现次数- 计算器算一下 \(\sqrt 500000 = 708\) 然后我们发现这题的突破口? 考虑分块出来[L,R]块的众数出现个数 用 \(\texttt{mx[L][R]}\) 维护就可以了 每次考虑一个L- 然后R指针一直向右移不断的更新到N 这样子做的复杂度因为最多有 \(\sqrt n\) 个块 所以复杂度大概是 \(n\sqrt n\) 实际上还少一点- 然后整块的想好了--单独的怎么处理? 分类讨论 1 \(\texttt{L}\)和…
题目链接 洛谷. Solution 思路同[BZOJ2724] [Violet 6]蒲公英,只不过由于lxl过于毒瘤,我们有一些更巧妙的操作. 首先还是预处理\(f[l][r]\)表示\(l\sim r\)块的众数数量,注意这里不要求具体是什么,我们就有一些奇技淫巧了. 当然第一步还是离散化,对于权值为\(v\)的点,我们开一个\(vector\)来从小到大存这个权值在哪里出现过,在记个\(pos[i]\)表示\(i\)在$vector $内的下标是什么. 那么预处理\(f[l][r]\)的时候…
题目大意: 给你一个长为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…
题目描述 给你一个长为n的排列,m次询问,每次查询一个区间的逆序对数,强制在线. 题解 MD不卡了..TMD一点都卡不动. 强制在线的话也没啥好一点的方法,只能分块预处理了. 对于每个块,我们设lef[i]表示i到这个i这个元素所在块的块头的区间逆序对,rig[i]表示到块尾的逆序对. 在设一个cnt[i][j]表示从第i个块到第j个块的逆序对. 然后考虑如何处理询问. 整块之间的可以直接O(1)取答案,对于散块,我们需要求出散块内部的答案,散块对整块的答案,散块对散块的答案. 对于散块内的,因…