news 2026/10/14 23:02:46

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 0:18:38

Kotaemon配置热更新机制:无需重启服务的变更生效

Kotaemon配置热更新机制&#xff1a;无需重启服务的变更生效 在企业级智能对话系统的实际部署中&#xff0c;一个看似微小的配置调整&#xff0c;往往可能引发一场“服务雪崩”——修改参数、提交代码、等待构建、重启服务、验证功能……这一连串流程不仅耗时&#xff0c;更致…

作者头像 李华
网站建设 2026/10/15 18:09:21

还在问CTF是啥?这篇“网安扫盲贴”,带你从入门到入坑!

还在问CTF是啥&#xff1f;这篇“网安扫盲贴”&#xff0c;带你从入门到入坑&#xff01; CTF&#xff1f;听起来像某种神秘代码&#xff0c;新手该如何玩转&#xff1f; CTF&#xff08;Capture The Flag&#xff09;&#xff0c;江湖人称“夺旗赛”&#xff0c;在网络安全界…

作者头像 李华
网站建设 2026/10/14 23:38:45

5分钟搞定AI字幕生成:ComfyUI终极配置完整指南 [特殊字符]

5分钟搞定AI字幕生成&#xff1a;ComfyUI终极配置完整指南 &#x1f680; 【免费下载链接】ComfyUI_SLK_joy_caption_two ComfyUI Node 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_SLK_joy_caption_two 还在为视频字幕制作烦恼吗&#xff1f;ComfyUI字幕生成…

作者头像 李华
网站建设 2026/10/14 14:02:23

从8小时到20分钟:90后运营如何一键生成竞品分析报告?

深夜十一点&#xff0c;上海某消费科技公司的市场总监李悦还在为明天一早的竞品分析会焦头烂额。老板临时要求她补充三家海外竞品的最新动态、用户评价与价格策略分析&#xff0c;并形成结构化报告。按照以往流程&#xff0c;她需要协调实习生收集数据、手动整理信息、撰写分析…

作者头像 李华
网站建设 2026/10/15 18:39:23

Bark推送通知:从枯燥到惊艳的个性化改造指南

Bark推送通知&#xff1a;从枯燥到惊艳的个性化改造指南 【免费下载链接】Bark Bark is an iOS App which allows you to push custom notifications to your iPhone 项目地址: https://gitcode.com/gh_mirrors/bar/Bark 你是否厌倦了千篇一律的推送通知&#xff1f;那些…

作者头像 李华
网站建设 2026/10/15 16:00:34

Excel处理控件Aspose.Cells教程:使用C#在Excel中创建树状图

使用树状图可视化层级数据&#xff0c;可以使复杂的信息一目了然。本文将介绍如何使用 C# 和Aspose.Cells for .NET在 Excel 中创建树状图。本指南包含完整的可运行代码示例、自定义图表外观的技巧以及快速入门的资源。 Aspose.Cells官方试用版免费下载 用于创建树状图的 C# …

作者头像 李华