蒲公英/分块入门九Byhzwer

辣鸡我复制粘贴题面格式极其丑陋,各位看原题面啦。

【题目描述】

在乡下的小路旁种着许多蒲公英,而我们的问题正是与这些蒲公英有关。

为了简化起见,我们把所有的蒲公英看成一个长度为n的序列 (a1​,a2​..an​),其中 ai​为一个正整数,表示第i棵蒲公英的种类编号。

而每次询问一个区间 [l,r],你需要回答区间里出现次数最多的是哪种蒲公英,如果有若干种蒲公英出现次数相同,则输出种类编号最小的那个。

注意,你的算法必须是在线的

【输入格式】
第一行两个整数 n,m,表示有n株蒲公英,m次询问。

接下来一行n个空格分隔的整数 a_i ,表示蒲公英的种类

再接下来m 行每行两个整数 l0,r0,我们令上次询问的结果为 x(如果这是第一次询问, 则 x=0)。

令 l=(l0+x-1)mod n+1,r=(r0+x-1)mod n+1如果 l>r,则交换 l,r 。

最终的询问区间为[l,r]。

【输出格式】
输出m 行。每行一个整数,表示每次询问的结果。

【题解思路】

某谷上写的一道黑题

传送门:hzwer的分块入门+WJMZBMR的区间众数解题报告

没什么心思写难题,毕竟我还有很多坑要填,但是分块入门九题就差这一题了有点不甘心。

蒲公英是强制在线的,而wjmzbmr的解题报告中涉及了单点修改和区间众数查询,同样也需要在线完成。

区间众数解题报告

考虑单独询问众数的操作

如果一个元素既不是集合a的众数也不在集合b中,那么它在a,b集合所有元素中出现的次数就是在a中出现的次数,不会比单独在集合a中出现的次数要多。

我们可以预处理出从块i到块j这些数的众数,然后按照分块的一般套路来写,只需枚举这些数并判断出现次数,块中优化可用二分。

考虑优化

我们需要在O(1)时间内回答[l,r]中有几个x这样的问题,我们很自然的想到了类似前缀和的优化。设f[i][x]表示[0,i]区间内有多少个x然后对于区间[l,r]内x的个数,只需f[r,x] – f[l-1,x]。考虑如何优秀地预处理出f[i][x],那当然是分块。

同时对于每一个块b,预处理出A[b][i][x]:块b的前i个元素中x出现了多少次。可以通过每个块开一个表(什么表啊)来实现。

我真的没太懂开表实现blalala。

阔是,我萌还要搞一些操作,把这过东西搞成在线的。

考虑在线修改

对于每个块,不管怎么搞,我们需要维护每个值在其中出现了多少次和最大出现次数,同时用cnt[i]表示出现了i次的值有几个。

具体维护灰常容易,就那么暴力搞就行了。关于f[i][x],随时改变就是了。

至于代码,我代码跟上面的思路不太一样......(逃,留坑

【BZOJ2724】【Violet 6】蒲公英的更多相关文章

  1. [BZOJ2724][Violet 6]蒲公英

    [BZOJ2724][Violet 6]蒲公英 试题描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 输入示 ...

  2. BZOJ2724 [Violet 6]蒲公英 分块

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ2724.html 题目传送门 - BZOJ2724 题意 求区间最小众数,强制在线. $n$ 个数,$m ...

  3. bzoj2724: [Violet 6]蒲公英(离散化+分块)

    我好弱啊..这题调了2天QwQ 题目大意:给定一个长度为n(n<=40000)的序列,m(m<=50000)次询问l~r之间出现次数最多的数.(区间众数) 这题如果用主席树就可以不用处理一 ...

  4. bzoj2724: [Violet 6]蒲公英 分块 区间众数 论algorithm与vector的正确打开方式

    这个,要处理各个数的话得先离散,我用的桶. 我们先把每个块里的和每个块区间的众数找出来,那么在查询的时候,可能成为[l,r]区间的众数的数只有中间区间的众数和两边的数. 证明:若不是这里的数连区间的众 ...

  5. 【分块】bzoj2724 [Violet 6]蒲公英

    分块,离散化,预处理出: ①前i块中x出现的次数(差分): ②第i块到第j块中的众数是谁,出现了多少次. 询问的时候,对于整块的部分直接获得答案:对于零散的部分,暴力统计每个数出现的次数,加上差分的结 ...

  6. bzoj2724: [Violet 6]蒲公英(分块)

    传送门 md调了一个晚上最后发现竟然是空间开小了……明明算出来够的…… 讲真其实我以前不太瞧得起分块,觉得这种基于暴力的数据结构一点美感都没有.然而今天做了这道分块的题才发现分块的暴力之美(如果我空间 ...

  7. 【BZOJ2724】[Violet 6]蒲公英 分块+二分

    [BZOJ2724][Violet 6]蒲公英 Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n ...

  8. BZOJ 2724: [Violet 6]蒲公英

    2724: [Violet 6]蒲公英 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 1633  Solved: 563[Submit][Status ...

  9. BZOJ 2724: [Violet 6]蒲公英( 分块 )

    虽然AC了但是时间惨不忍睹...不科学....怎么会那么慢呢... 无修改的区间众数..分块, 预处理出Mode[i][j]表示第i块到第j块的众数, sum[i][j]表示前i块j出现次数(前缀和, ...

  10. BZOJ_2724_[Violet 6]蒲公英_分块

    BZOJ_2724_[Violet 6]蒲公英_分块 Description Input 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod ...

随机推荐

  1. linux降低内存后oracle数据库无法启动

    降低了虚拟机的内存之后发现虚拟机中的oracle数据库无法startup,原因是 target memory的数据有问题,然后在安装数据库的使用的是自动内存管理.涉及的一个系统文件 /dev/shm ...

  2. Unity3d之如何截屏

    Unity3d中有时有截屏的需求,那如何截屏呢,代码如下: /// <summary> /// 截屏 /// </summary> /// <param name=&qu ...

  3. html5-浮动

    #div1{    background: rgba(255,0,0,0.5);    width: 250px;    height: 250px;    float: right;}#div2{  ...

  4. SLAM学习笔记 - 世界坐标系到相机坐标系的变换

    参考自: http://blog.csdn.net/yangdashi888/article/details/51356385 http://blog.csdn.net/li_007/article/ ...

  5. python os.path.dirname()

    ----返回文件所在的路径 ----如果path变量直接是文件名则返回空

  6. jQuery懒加载插件jquery.lazyload.js使用说明实例

    jQuery懒加载插件jquery.lazyload.js使用说明实例很多网站都会用到‘图片懒加载’这种方式对网站进行优化,即延迟加载图片或符合某些条件才开始加载图片.懒加载原理:浏览器会自动对页面中 ...

  7. Java国际化号码验证方法,国内手机号正则表达式

    Java国际化号码验证方法,国内手机号正则表达式 中国电信号段 133.149.153.173.177.180.181.189.199 中国联通号段 130.131.132.145.155.156.1 ...

  8. centos6.8卸载DB2 10.5

    1.卸载实例 Ø  使用Root用户登陆 cd /opt/ibm/db2/V9.5/instance/ ./db2idrop db2inst1 ./dasdrop db2inst1 2.卸载db2 Ø ...

  9. Vue2.0,Express实现的简单跨域

    https://www.cnblogs.com/kevin-zjy-blog/p/7357220.html 1. 通过jsonp跨域2. document.domain + iframe跨域3. lo ...

  10. 源码下载:74个Android开发开源项目汇总

    1. ActionBarSherlock ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便地使用所 ...