当前位置: 首页 > news >正文

P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III

目录

    • 题目-P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
    • 问题分析
    • 算法步骤
    • 代码实现

题目-P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III

问题分析

查询区间众数出现的次数, 尝试对区间进行分块

假设已经知道了区间内众数出现的次数s ss, 那么只需要判断散列块中是否有哪个数字还能成为众数

对于每个数字记录出现的位置v vv,v [ a [ i ] ] v[a[i]]v[a[i]]代表a [ i ] a[i]a[i]出现的一些位置,p o s [ i ] pos[i]pos[i]代表a [ i ] a[i]a[i]v [ a [ i ] ] v[a[i]]v[a[i]]中的索引

假设区间内众数出现的次数是a n s ansans

  • 枚举所有左侧散列块, 假设数值是w ww, 那么只需要检查是否存在v [ w ] [ p o s [ i ] + a n s ] ≤ r v[w][pos[i] + ans] \le rv[w][pos[i]+ans]r, 就可以更新a n s ansans, 也就是算上当前位置,w ww出现的次数是a n s + 1 ans + 1ans+1
  • 枚举右侧散列块, 假设数值是w ww, 检查v [ w ] [ p o s [ i ] − a n s ] ≥ l v[w][pos[i] - ans] \ge lv[w][pos[i]ans]l, 算上当前位置,w ww出现的次数是a n s + 1 ans + 1ans+1

算法步骤

  • 初始化分块, 对数据进行离散化
  • 暴力初始化f ff数组

代码实现

#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+10,M=710;intn,m,a[N];vector<int>vec;intbsize,bcnt,st[M],ed[M],b[N];vector<int>v[N];intpos[N],f[M][M],tot[N];voidinit(){bsize=sqrt(n);bcnt=(n-1)/bsize+1;for(inti=1;i<=bcnt;++i){st[i]=(i-1)*bsize+1;ed[i]=min(n,i*bsize);}for(inti=1;i<=n;++i)b[i]=(i-1)/bsize+1;sort(vec.begin(),vec.end());vec.erase(unique(vec.begin(),vec.end()),vec.end());}intfind(intx){returnlower_bound(vec.begin(),vec.end(),x)-vec.begin();}intquery(intl,intr){intx=b[l],y=b[r];if(x==y){intans=0;for(inti=l;i<=r;++i)tot[a[i]]=0;for(inti=l;i<=r;++i)ans=max(ans,++tot[a[i]]);returnans;}intans=f[x+1][y-1];for(inti=l;i<=ed[x];++i){intt=pos[i];if(i+t<v[a[i]].size()&&v[a[i]][i+t]<=r)ans++;}for(inti=st[y];i<=r;++i){intt=pos[i];if(t-ans>=0&&v[a[i]][t-ans]>=l)ans++;}returnans;}intmain(){ios::sync_with_stdio(false);cin.tie(0);cin>>n>>m;for(inti=1;i<=n;++i)cin>>a[i],vec.push_back(a[i]);init();for(inti=1;i<=n;++i)a[i]=find(a[i]);for(inti=1;i<=n;++i){v[a[i]].push_back(i);pos[i]=v[a[i]].size();pos[i]--;}for(inti=1;i<=bcnt;++i){memset(tot,0,sizeoftot);for(intj=i;j<=bcnt;++j){f[i][j]=f[i][j-1];for(intk=st[j];k<=ed[j];++k){f[i][j]=max(f[i][j],++tot[a[k]]);}}}intlast=0;while(m--){intl,r;cin>>l>>r;l^=last,r^=last;if(r<l)swap(l,r);intans=query(l,r);cout<<ans<<'\n';last=ans;}return0;}
http://www.jsqmd.com/news/110904/

相关文章:

  • 2025年耐气候老化性管材制造企业权威推荐榜单:PVDF管材/耐腐蚀性管材/耐热性管材制造企业精选 - 品牌推荐官
  • 低速离心机2025年市场调研与优质源头厂家(知名企业)推荐 - 品牌推荐大师1
  • Omnissa Horizon 8 2512 发布 - 虚拟桌面基础架构 (VDI) 和应用软件
  • 极速组态!Profinet转Ethernet网关让ABB机器人主站秒连工业网络(上集)
  • 精通Java LaTeX渲染:JLaTeXMath实战应用全解析
  • 期末复习:结构算法题
  • 减肥产品怎么选不踩雷?1000+用户真实反馈,2025 高口碑品牌无滤镜测评榜单 - 速递信息
  • 2025年市面上专业的自建房建设厂商口碑排行,别墅自建房/庭院/院墙/外墙仿石漆/自建房建设品牌如何选 - 品牌推荐师
  • 如何高效定制B站API认证凭证:全新Cookies配置指南
  • PyTorch中GRU与LSTM的构建与比较
  • 【前瞻预告】2025-2026北京律师事务所哪家好?预热榜单与核心机构解析 - 老周说教育
  • 用Java语言输出1-100之间的素数
  • 2025年12月写字楼电梯维保,小区电梯维保,酒店电梯维保公司推荐:行业测评与选择指南 - 品牌鉴赏师
  • 2025年发电机租赁厂家最新推荐:重庆康合机电实力解析报告出炉! - 深度智识库
  • 2025-2026三相伺服电机/交流伺服电机厂家优选:这家国家专精特新“小巨人”企业不容错过 - 品牌推荐大师1
  • 2025 年 12 月仓储货架厂家实力推荐榜:重型/模具/悬臂/立体/阁楼/高位货架,超强承重与空间优化解决方案精选 - 品牌企业推荐师(官方)
  • 57、家庭局域网搭建与使用全攻略
  • Omnissa Unified Access Gateway 2512 - 远程安全的应用程序访问
  • Android USB相机开发实战:从零构建OTG摄像头集成方案
  • 上海建筑防水服务市场观察:五家服务商的技术特点与场景适配分析,上海防水补漏 TOP5 出炉 - shruisheng
  • 【巢湖学院主办,IETConferenceProceedings出版】第八届机械、控制与计算机工程国际学术会议(ICMCCE 2025)
  • 从零开始构建DE25-Nano的Linux Image(LXDE)
  • 2025自媒体运营行业深度分析:尚帝传媒靠谱解决方案汇总
  • 专业解析|北京律师事务所实力排名:2025-2026口碑与胜诉率核心对比 - 老周说教育
  • 5分钟学会Python PSD文件解析:无需Photoshop的终极解决方案
  • 终极指南:Bark推送通知的个性化定制全攻略
  • linux和win的换行符转换
  • 北京法律帮助必看!2025-2026前十强律所口碑排名:全维度专业能力测评 - 老周说教育
  • Mikan Flutter:5分钟掌握动漫资源聚合应用完整使用指南
  • 原圈科技推动金融业AI营销内容生产合规升级的关键实践