尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III
📅 发布时间:2026/6/19 23:33:27

目录

    • 题目-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;}

相关新闻

  • 精通Java LaTeX渲染:JLaTeXMath实战应用全解析
  • 2026年仪器信息平台/仪器网站发展前景及网站推荐 - 品牌推荐大师1
  • 2026年仪器信息平台/仪器网站发展前景及网站推荐 - 品牌推荐大师1

最新新闻

  • 终极指南:ieBetter.js与Sizzle选择器引擎如何在IE6-IE8下实现现代CSS选择器
  • 2026昆明防水补漏维修团队实测盘点TOP4:昆明业主房屋渗漏修缮靠谱选择 - 宅安选房屋修缮
  • 巧用脚本守护:解决macOS iNode安全检查失败与自动断连的自动化方案
  • 美格信解读:从公式到听感,THD与THD+N的实战辨析
  • 从入门到精通:Catcher异常过滤器与参数排除高级用法终极指南
  • 解决Docker Machine文件共享慢问题:NFS替代默认挂载的完整方案

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号