洛谷P4168 蒲公英 [Violet] 分块
题解:分块+离散化
解题报告:
一个分块典型题呢qwq还是挺妙的毕竟是道黑题
然,然后发现忘记放链接了先放链接QAQ
有两三种解法,都港下qwq
第一个是O(n5/3)的复杂度,谢总说不够优秀没有港,等下看了再写qwq
umm看了下大概明白了似乎qwq
虽然不知道我看的是不是这个解法×
就是法二不是有个f[][]表示区间内众数是谁嘛
然后法一中除了开这个以外还开了color[][][]表示区间内每个数的出现次数
这样就不用二分了!
但是这样的话就很容易T?是要吸氧的qwq
代码就懒得放了(主要懒得打了,,,这个题目的细节太多了,,,QAQ
第二个是O(n√nlogn)的,这个港下
就先分块,处理每个块里面的众数
然后对于每个询问,答案有两种可能
第一种,是中间被完全包含的块的众数
第二种,是两边出现过的数
然后再开个vector相当于桶排一样存下每个值所有出现的位置,每次lowerbound暴力查找第二种(两边的直接强行暴力枚举就好
第一种的话可以先暴力预处理出f[i][j]表示第i块到第j块的众数,这样每次就可以直接查了qwq)
然后就可以了,正确性我感觉还挺显然的就不证明辣?
其实我都懒得打这个代码了,,,本来感觉想通了思路之后大概不太复杂?但总有人问我做了没有,,,就很烦,,,于是就做了下
然后发现细节挺多挺麻烦:D
于是就耗了一天总算打出来了
布星啊现在状态越来越差了随便丢我个题都要调好久好久好久的,效率极低QAQ
对了这题给了我个小惊喜欸,,,就是,我才知道我的离散化一直有一点儿问题...就是我unique的那个tot,应该还要-=1我一直没有这么做,但玄学的是一直好像也没问题,,,ummm,,,很迷,,,幸好NOIp中我没有用离散化啥的不然怕是直接GG了?QAQ
然后放个代码就走了,就是记得把第三个方法学下趴qwq
#include<bits/stdc++.h> using namespace std; #define rp(i,x,y) for(register int i=x;i<=y;++i) #define my(i,x,y) for(register int i=y;i>=x;--i) +,sqtN=+; int n,m,cjk,len,a[N],b[N],st[N],num[N],mx[sqtN][sqtN]; vector<int>gg[N]; inline int read() { ;; '))ch=getchar(); ; )+(x<<)+(ch^'),ch=getchar(); return y?x:-x; } int cal(int x,int l,int r) { ); int L,R,ret1,ret2; L=,R=gg[x].size()-,ret1=R; while(L<=R) { ; ; ; } L=,R=gg[x].size()-,ret2=L; while(L<=R) { ; ; ; } ,); } int main() { // freopen("cjk.in","r",stdin); // freopen("cjk.out","w",stdout); n=read();m=read();len=;cjk=(n-)/len+; rp(i,,n)st[i]=a[i]=read(); sort(st+,st++n);,st++n)-st-; rp(i,,n)a[i]=lower_bound(st+,st++tot,a[i])-st; rp(i,,n)gg[a[i]].push_back(i); rp(i,,n)b[i]=(i-)/len+; rp(i,,cjk) { memset(num,,sizeof(num)); ; rp(j,i,cjk) { rp(k,(j-)*len+,min(n,j*len)) { num[a[k]]++; if(num[a[k]]>num[x] || (num[a[k]]==num[x] && x>a[k]))x=a[k]; } mx[i][j]=x; } } ; while(m--) { )%n+,r=(read()+ans-)%n+,mxans=,x=;if(l>r)swap(l,r); ) rp(i,l,r) { int d=cal(a[i],l,r); if(d>mxans || (d==mxans && x>a[i]))mxans=d,x=a[i]; } else { x=mx[b[l]+][b[r]-];mxans=cal(x,l,r);//二分和max都打挂了?哭了QAQ );++i) { int d=cal(a[i],l,r); if(d>mxans || (d==mxans && x>a[i]))mxans=d,x=a[i]; } && (i==r || i%len!=);--i) { int d=cal(a[i],l,r); if(d>mxans|| (d==mxans && x>a[i]))mxans=d,x=a[i]; } } printf("%d\n",ans=st[x]); } ; }
第三个是听说有个O(n√n)的?然后我不会:D先把解法二写了再来学这个qwq
洛谷P4168 蒲公英 [Violet] 分块的更多相关文章
- 洛谷P4168 蒲公英 分块处理区间众数模板
题面. 许久以前我还不怎么去机房的时候,一位大佬好像一直在做这道题,他称这道题目为"大分块". 其实这道题目的思想不只可以用于处理区间众数,还可以处理很多区间数值相关问题. 让我们 ...
- 【洛谷 P4168】[Violet]蒲公英(分块)
题目链接 题目大意:给定\(n\)个数和\(m\)个求区间众数的询问,强制在线 这题我\(debug\)了整整一个下午啊..-_- 从14:30~16:45终于\(debug\)出来了,\(debug ...
- 洛谷P4198 楼房重建 (分块)
洛谷P4198 楼房重建 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题, ...
- 洛谷P4135 作诗 (分块)
洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...
- 洛谷P3247 [HNOI2016]最小公倍数 [分块,并查集]
洛谷 思路 显然,为了达到这个最小公倍数,只能走\(a,b\)不是很大的边. 即,当前询问的是\(A,B\),那么我们只能走\(a\leq A,b\leq B\)的边. 然而,为了达到这最小公倍数,又 ...
- 「分块系列」「洛谷P4168 [Violet]」蒲公英 解题报告
蒲公英 Description 我们把所有的蒲公英看成一个长度为\(n\)的序列(\(a_1,a_2,...a_n\)),其中\(a_i\)为一个正整数,表示第i棵蒲公英的种类的编号. 每次询问一个区 ...
- 洛谷 P4168 [Violet]蒲公英 解题报告
P4168 [Violet]蒲公英 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多 ...
- [洛谷P4168][Violet]蒲公英
题目大意:有$n(n\leqslant4\times10^4)$个数,$m(m\leqslant5\times10^4)$个询问,每次问区间$[l,r]$内的众数,若相同输出最小的,强制在线. 题解: ...
- 洛谷 P4168 [Violet] 蒲公英
历尽千辛万苦终于AC了这道题目... 我们考虑1个区间\([l,r]\), 被其完整包含的块的区间为\([L,R]\) 那么众数的来源? 1.\([l,L)\)或\((R,r]\)中出现的数字 2.\ ...
随机推荐
- [ZZ]c++ cout 格式化输出浮点数、整数及格式化方法
C语言里可以用printf(),%f来实现浮点数的格式化输出,用cout呢...?下面的方法是在网上找到的,如果各位有别的办法谢谢留下... iomanip.h是I/O流控制头文件,就像C里面的格式化 ...
- Bugly最简单的配置方法
1,注册Bugly帐号 2.项目 build.gradle 中配置 compile 'com.tencent.bugly:crashreport:latest.release'//其中latest.r ...
- 初步总结javascript中学习DOM之前的知识
嘿嘿,又到了周末时间,周六其实就是总结这周的学习的,记得周二周三刚开始接触javascript时间,还是不知道怎么学习的,就感觉找不到方向,那时间学习的只是总结了一些简单的定义或者是学习结构,今天就把 ...
- codeforces水题100道 第一题 Codeforces Beta Round #1 A. Theatre Square (math)
题目链接:http://www.codeforces.com/problemset/problem/1/A题意:至少用多少块边长为a的方块铺满NxM的矩形区域.C++代码: #include < ...
- [转载]WebConfig配置文件详解
<?xml version="1.0"?> <!--注意: 除了手动编辑此文件以外,您还可以使用 Web 管理工具来配置应用程序的设置.可以使用 Visual S ...
- 删除SQL注入的一些方法总结
sql替换法: ); set @myStr='oa_20121026new.bak</title><style>.alx2{position:absolute;clip:rec ...
- 用图形数据库Neo4j 设计权限模块
已经 SpringSecurity 在几个项目中 实现权限模块,对于数据库,也是思考了不少,从Mysql 到 mongodb 都不是特别满意, 在Mysql中,如果权限相对简单,那么还能接受,如果稍微 ...
- UVALive - 3507 Keep the Customer Satisfied
题意:收到n个订单,每个订单有q,d分别代表做这个的时间,和最晚的完成时间,问你最多能接受几个订单 思路:贪心,我们显然要按最早的完成时间排序,那么接下来,我们用(6,8)和(4,9)做为例子,按照我 ...
- 剑指offer——35复杂链表的复制
这题很是巧妙. 突破了常规思维. 竟然可以把传入进来的链表和复制的链表链在一起.然后再算出slibling指针.最后在分离. 直接把空间复杂度变为O(1)了. 很巧妙,很实用. 题目: 请实现函数Co ...
- aws.s3的 upload 和putObject有什么区别
相同点:上传或新增一个object : <template> <div class="page"> <!-- 参考:https://blog.csdn ...