【分块】区间众数


关于分块求众数可以看黄学长写的蒲公英题解

链接:http://hzwer.com/3582.html

【题目大意】

总共有n个数,m个询问,对于每个询问[l,r]求出区间内众数的出现次数

1<=n<=10000,1<=m<=20000

【做法】

我当时还不会莫队只能用分块来做......结果学长说这是莫队模板题比较尴尬

首先先离散化处理一下【不然咋做我不会啊】

接着枚举处理任意两块[x,y]间的众数,具体做法是拿个数组记录每个数出现过的次数

枚举x,然后从x扫右扫一遍就可以求出[x,x+1到总块数]的区间众数

通过观察可以发现在i到j之间,众数一定为完整的块中的众数与不完整的块中的每个数

所以我们需要快速求出不完整的块中的每个数出现的次数

发现上面我们离散化了就好做了

对于每个数开个队列/vector存每一次出现的位置,然后把区间的左端点右端点分别二分再相减就可以求出这个数在区间里出现的次数

【代码】

见黄学长博客吧,可能只需要稍微改一下

(之前电脑屏幕满了一怒之下把桌面上的所有代码跟图片都删了......所以现在手上没有代码也懒得写)

后天NOIP2016各位加油!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM