正题

评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P4168


题目大意

询问区间众数


解题思路

将数字离散化,然后分块。对于数组vi,j,kv_{i,j,k}vi,j,k​,表示i∼ji\sim ji∼j个块,kkk的个数。对于询问(l,r)(l,r)(l,r),将整块的直接累计,然后局部的直接暴力。

时间复杂度:O(NT2+MNT)O(NT^2+\frac{MN}{T})O(NT2+TMN​),根据LYD的说法,让T≈n3T\approx \sqrt[3]nT≈3n​的话,时间复杂度就可以在O(N53)O(N^{\frac{5}{3}})O(N35​)级别。

代码写优美些或者加点优化就可以过。


code

#pragma GCC optimize(2)
%:pragma GCC optimize(3)
%:pragma GCC optimize("Ofast")
%:pragma GCC optimize("inline")
%:pragma GCC optimize("-fgcse")
%:pragma GCC optimize("-fgcse-lm")
%:pragma GCC optimize("-fipa-sra")
%:pragma GCC optimize("-ftree-pre")
%:pragma GCC optimize("-ftree-vrp")
%:pragma GCC optimize("-fpeephole2")
%:pragma GCC optimize("-ffast-math")
%:pragma GCC optimize("-fsched-spec")
%:pragma GCC optimize("unroll-loops")
%:pragma GCC optimize("-falign-jumps")
%:pragma GCC optimize("-falign-loops")
%:pragma GCC optimize("-falign-labels")
%:pragma GCC optimize("-fdevirtualize")
%:pragma GCC optimize("-fcaller-saves")
%:pragma GCC optimize("-fcrossjumping")
%:pragma GCC optimize("-fthread-jumps")
%:pragma GCC optimize("-funroll-loops")
%:pragma GCC optimize("-fwhole-program")
%:pragma GCC optimize("-freorder-blocks")
%:pragma GCC optimize("-fschedule-insns")
%:pragma GCC optimize("inline-functions")
%:pragma GCC optimize("-ftree-tail-merge")
%:pragma GCC optimize("-fschedule-insns2")
%:pragma GCC optimize("-fstrict-aliasing")
%:pragma GCC optimize("-fstrict-overflow")
%:pragma GCC optimize("-falign-functions")
%:pragma GCC optimize("-fcse-skip-blocks")
%:pragma GCC optimize("-fcse-follow-jumps")
%:pragma GCC optimize("-fsched-interblock")
%:pragma GCC optimize("-fpartial-inlining")
%:pragma GCC optimize("no-stack-protector")
%:pragma GCC optimize("-freorder-functions")
%:pragma GCC optimize("-findirect-inlining")
%:pragma GCC optimize("-fhoist-adjacent-loads")
%:pragma GCC optimize("-frerun-cse-after-loop")
%:pragma GCC optimize("inline-small-functions")
%:pragma GCC optimize("-finline-small-functions")
%:pragma GCC optimize("-ftree-switch-conversion")
%:pragma GCC optimize("-foptimize-sibling-calls")
%:pragma GCC optimize("-fexpensive-optimizations")
%:pragma GCC optimize("-funsafe-loop-optimizations")
%:pragma GCC optimize("inline-functions-called-once")
%:pragma GCC optimize("-fdelete-null-pointer-checks")
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#define Tn 40
#define N 40010
using namespace std;
int n,m,L[Tn],R[Tn],v[Tn][Tn][N],l,r,num[N];
int z[N],w[N],a[N],cnt,k[N],t,T,pos[N],x;
bool cmp(int x,int y)//排序
{return z[x]<z[y];}
void begins()//预处理
{for(int i=1;i<=t;i++){L[i]=(i-1)*T+1;R[i]=i*T;}if(R[t]<n) t++,L[t]=R[t-1]+1,R[t]=n;//计算边界for(int i=1;i<=t;i++)for(int j=i;j<=t;j++)for(int k=L[i];k<=R[j];k++)v[i][j][a[k]]++;//计算v数组
}
int ask(int l,int r)
{int p=pos[l],q=pos[r];if(p-q<=2){memset(k,0,sizeof(k));for(int i=l;i<=r;i++)k[a[i]]++;}else{p++;q--;for(int i=1;i<=cnt;i++)k[i]=v[p][q][i];//直接累计for(int i=l;i<L[p];i++)//暴力统计k[a[i]]++;for(int i=R[q]+1;i<=r;i++)//暴力统计*2k[a[i]]++;}int mark=1;for(int i=2;i<=cnt;i++)//找众数if(k[i]>k[mark]) mark=i;return w[mark];
}
int main()
{scanf("%d%d",&n,&m);t=(int)pow(double(n),1.0/3);T=n/t;for(int i=1;i<=n;i++){scanf("%d",&z[i]);num[i]=i;}sort(num+1,num+1+n,cmp);z[0]=-1;for(int i=1;i<=n;i++)//离散化{if(z[num[i]]!=z[num[i-1]]) cnt++,w[cnt]=z[num[i]];;a[num[i]]=cnt;}T=n/t;begins();for(int i=1;i<=m;i++){scanf("%d%d",&l,&r);l=(l+x-1)%n+1;r=(r+x-1)%n+1;if(l>r) swap(l,r);printf("%d\n",x=ask(l,r));}
}

P4168-[Violet]蒲公英【分块】相关推荐

  1. Luogu P4168 [Violet]蒲公英(分块)

    P4168 [Violet]蒲公英 题意 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还 ...

  2. 洛谷 - P4168 [Violet]蒲公英(分块+离散化)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数列,再给出 m 次查询,每次查询区间 [ l , r ] 内的众数,要求强制在线 题目分析:对于这个题意来说,如果允许离线的话,完全可以用莫队当模 ...

  3. Luogu P4168 [Violet]蒲公英 分块

    这道题算是好好写了.写了三种方法. 有一个好像是$qwq$$N\sqrt(N)$的方法,,但是恳请大佬们帮我看看为什么这么慢$qwq$(后面的第三种) 注:$pos[i]$表示$i$属于第$pos[i ...

  4. 【题解】洛谷P4168 [Violet]蒲公英 (分块)

    [题解]洛谷P4168 [Violet]蒲公英 (分块)     D e s c r i p t i o n \rm Description Description 我们把所有的蒲公英看成一个长度为 ...

  5. 洛谷 P4168 [Violet]蒲公英 解题报告

    P4168 [Violet]蒲公英 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多 ...

  6. 洛谷 P4168 [Violet]蒲公英

    题目:蒲公英 思路: 分块. 把所有数分成 n \sqrt{n} n ​个块,在每个块里分别求解. 代码: #include<bits/stdc++.h> using namespace ...

  7. P4168 [Violet]蒲公英

    传送门 A的第一道黑题... 然而感觉跟 作诗 没什么差别... 分块 记录 sum[ i ] [ j ] 表示从左端点到第 i 块时,数字 j 的出现次数 f [ i ] [ j ] 表示第 i 块 ...

  8. LUOGU P4168 [Violet]蒲公英

    传送门 解题思路 分块码农题,设分成T块,cnt[i][j][k]表示第i块到第j块,k出现的次数,需要离散化.all[i][j] 表示第i块到第j块的众数.然后这两个数组先预处理出来.然后询问的时候 ...

  9. P4168 [Violet] 分块 + 二分

    题意 传送门 P4168 [Violet]蒲公英 题解 在线求区间众数问题.考虑分块,假设将整个区间分为 T T T 块,块 i i i 的边界为 [ L [ i ] , R [ i ] ) [L[i ...

  10. P4168 (静态分块

    P4168 (静态分块 题意:区间众数,强制在线 思路:离线考虑莫队,在线考虑静态分块.块之间的贡献不独立, a n s [ i ] [ j ] ans[i][j] ans[i][j]表示块 [ i ...

最新文章

  1. 一文讲清,MySQL主从架构
  2. 大数据中台架构之道: PaaS + DaaS +DA 全域中台架构详解
  3. Spartan-6的SelectIO资源
  4. MS SQL “ 无法启动分布式事务“问题的解决思路
  5. 计算机的组成_计算机网络的组成和分类
  6. Entity Framework 学习中级篇3—存储过程(中)
  7. jQuery-demos轮播图练习(一)
  8. mysql grant权限分配(转)。
  9. RecyclerView使用中遇到的问题
  10. 锐捷无线项目调试(AC调试)
  11. 手机无线投屏到linux电脑,scrcpy - 手机无线投屏到电脑
  12. 自媒体平台搜狗号登陆 搜狗挑战百度、头条有胜算吗?
  13. Oracle官网 账号及密码
  14. python:实现绘制粽子(附完整源码)
  15. TMOS系统之NATS 和 SNAT
  16. 链游知识01:同质化和非同质化资产标准是什么?
  17. 系统集成项目管理工程师试题(2022年11月全国卷)
  18. 最新-开源可视化安全管理平台Ossim5.0使用
  19. 2018-8-7 直播课堂笔记
  20. TIOBE 3月编程排行榜出炉!Python杀疯了!

热门文章

  1. mysql中查询出现的错误_在MySQL查询中查询语法错误
  2. myclipes 配置php,myclipse使用技巧
  3. php框架快速入门,php-laravel4.0框架 简单快速入门
  4. vba cad 获取宏的路径_VBA批量创建文件目录及链接,建议收藏备用
  5. weblogic修改控制台ip_「Weblogic学习」Weblogic知识要点之JNDI/JTA编程开发
  6. 通过图书编号查询python_文字版图书管理-python练习
  7. android刷新时的圆形动画_Android自定义加载圈动画效果
  8. python 日期格式校验_python – 如何验证时间格式?
  9. python 3.9特性_Python 3.9来了!这十个新特性值得关注
  10. java 配置参数_给你的JAVA程序配置参数(Properties的使用)