回滚莫队模版

news/2025/11/22 16:43:00/文章来源:https://www.cnblogs.com/jiu-wei-lwj/p/19258086

回滚莫队模版

题意

给定数列,查询 \(l\)\(r\) 的众数。

思路

如果考虑暴力,我们需要一遍遍的遍历数列的数,然后求众数,但是这样效率太低了。

思考怎么优化,首先想到的线段树,但很容易发现这个众数一点都不好维护,想要全部记录,发现查找和合并的时间复杂度似乎都是 \(O(n)\) 并不好用。

容易发现这个是离线查询,可以用莫队求解,但是它不能做到删除(会退)的操作,也就是说,我们不能像莫队模版一样作奇偶优化,和左边界随便走。

所以我们参照莫队的思路,对同一块内线段的右端点来扩展右边界,而对于随机移动的左端点,我们每次移动左端点的时候,都记录一下这个起点的信息,每次做完再会退回来。至于哪里作为起点,由于一个块内所有左端点都小于这个块的右端点所以选择这个块的右端点作为起点。

code

#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn = 3e5+10;
constexpr int maxm = 700;
constexpr int mod = 10007;
constexpr int INF = 0x3f3f3f3f3f3f3f3f;
void read(int &);int n,n_n;
int idx[maxn];// i对应的块的id
int wi[maxn]; // 离散化的值
int tmp[maxn];// 用到再说,用法。。是个tmp
int ww[maxn]; // 原值
int cnt[maxn];// 离散化的值的计数typedef struct node
{int l,r,id;bool operator<(const node &t) const{return idx[l]==idx[t.l] ? r<t.r : idx[l]<idx[t.l];// 一块内按右端点排,不然按块排}
}node;node qwq[maxn];// 询问
int ans[maxn];// 答案void bf(int id) // 暴力处理小的查询
{int macnt=0;int maid=0;// 使用0而不是INF, 不然会reint top=0;// tmp临时存放修改的cntfor(int i=qwq[id].l; i<=qwq[id].r; ++i){if(!cnt[wi[i]]){tmp[++top]=wi[i];// wa过,这里要存i离散化后的值}++cnt[wi[i]];if(cnt[wi[i]]>macnt){macnt=cnt[wi[i]];maid=i;}else if(cnt[wi[i]]==macnt && ww[i]<ww[maid])// 如果由有更小的数字{maid=i;}}ans[qwq[id].id]=ww[maid];// 存入答案,注意传进来id是块的idfor(int i=1;i<=top;++i){cnt[tmp[i]]=0;}
}signed main()
{#ifndef ONLINE_JUDGEfreopen("cjdl.in","r",stdin);freopen("cjdl.out","w",stdout);#endif // ONLINE_JUDGEread(n);n_n=sqrt(n);for(int i=1;i<=n;++i){read(wi[i]);idx[i]=(i-1)/n_n+1;tmp[i]=wi[i];// 暂时存值,用于离散化ww[i]=wi[i];}sort(tmp+1,tmp+1+n);int id_w=unique(tmp+1,tmp+1+n)-tmp-1;for(int i=1;i<=n;++i){read(qwq[i].l);read(qwq[i].r);qwq[i].id=i;wi[i]=lower_bound(tmp+1,tmp+1+id_w,wi[i])-tmp;}sort(qwq+1,qwq+1+n);int now=1;// 存储处理到了哪个块for(int i=1;i<=n_n+10;++i){int L=(i-1)*n_n+1;int R=i*n_n;if(L>n){break;}int r=R, l=R+1;// 初始设为空,先++再计算int maid = 0;// 下标int macnt=0;for(;now<=n && qwq[now].l<=R;++now){if(qwq[now].r<R)// 在一个快内暴力作{bf(now);continue;}while(r<qwq[now].r)// 扩展右边界,注意不要吧x和r混起来{++r;int x=wi[r];++cnt[x];if(cnt[x]>macnt){macnt=cnt[x];maid=r;}else if(cnt[x]==macnt && ww[r]<ww[maid]){maid=r;}}int old_id=maid;int old_cnt=macnt;while(l>qwq[now].l)// 扩展右边界{--l;int x=wi[l];++cnt[x];if(cnt[x]>macnt){macnt=cnt[x];maid=l;}else if(cnt[x]==macnt && ww[l]<ww[maid]){maid=l;}}ans[qwq[now].id]=ww[maid];while(l<=R)// 回滚{--cnt[wi[l++]];}macnt=old_cnt;// 恢复l 在R+1的情况maid=old_id;}memset(cnt,0,sizeof cnt);// 清空}for(int i=1;i<=n;++i){printf("%lld\n",ans[i]);}return 0;
}void read(int &x)
{x=0;int f=1;signed c=getchar();while(!isdigit(c)){if(c=='-'){f=-1;}c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x*=f;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/973239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年拉袋离心机订制厂家权威推荐榜单:碟式离心机/卧螺离心机/活塞推料离心机源头厂家精选

在制药、化工等行业对固液分离技术要求不断提高的背景下,拉袋离心机凭借其自动化程度高、卸料效率优异的特点,正成为高端分离设备市场的重要选择。 据行业数据显示,2024年中国离心机市场规模已达156亿元,年均增长率…

Linux中: 通过编译安装的方式升级 OpenSSH 服务

Linux中: "通过编译安装的方式升级 OpenSSH 服务"OpenSSH 升级背景: 因为当前操作系统上的 OpenSSH 是通过包管理工具进行安装,因为低版本存在漏洞问题,但是官方仓库中没有最新的 OpenSSH 版本,所以此时…

纵观当代现状,70年代出生的人,可能别具一格

ECT-OS-JiuHuaShan/https://orcid.org/0009-0006-8591-1891对“70年代出生人群的别具一格”这一现象给出绝对确定性的因果分析。 历史相位的独特烙印 出生环境的因果特殊性 70年代出生者 = 成长于理想主义巅峰期(70-80…

#题解#洛谷 P4375 Out of Sorts G #离散化#

P4375 [USACO18OPEN] Out of Sorts G - 洛谷 分析注意到排序跟只跟数据的序相关,我们将原始数据离散化,并将数值更新为序不难注意到:每次moo只冒泡一次,对于每一个前缀子区间,会将较大的冒泡到末尾;由此不难想到…

hbase上如何导入python包

在 Hbase 上导入 Python 包(如 pandas、numpy、matplotlib 等)通常需要借助 Hadoop 的 YARN 环境 或 Hbase 的 HDFS 存储,因为 Hbase 本身是一个基于 HDFS 的分布式存储系统,其数据存储在 HDFS 上,而 Python 通常…

轻薄手机推荐:不止于轻,2025 旗舰体验榜 - 详解

轻薄手机推荐:不止于轻,2025 旗舰体验榜 - 详解2025-11-22 16:29 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

Git为什么要有submodule呢?

我们的项目中有一个子模块,所以导致经常更新master分支之后还需要对submodule进行一定的操作。所以我时常疑惑为什么会有这个东西呢?为什么一定要用子模块而不能把整个子模块加入我们的代码中呢? 其实主要解决的是这…

征程 6E/M 计算平台部署指南

1. 前言 本文旨在提供 征程 6E/M 计算平台的部署指南,将会从硬件、软件两部分进行介绍,本文整理了我们推荐的使用流程,和大家可能会用到的一些工具特性,以便于您更好地理解工具链。某个工具具体详细的使用说明,还…

2025年重庆废气收集处理机构权威推荐榜单:废气处理/废气治理/废气处理设备源头机构精选

在重庆工业绿色转型的浪潮中,专业的废气收集处理机构正凭借先进技术和服务经验,为制造业的可持续发展保驾护航。 随着环保要求的不断提高,重庆作为中国西部重要的工业基地,废气治理市场需求持续增长。据调研数据显…

详细介绍:第三章 FreeRTOS 任务相关 API 函数

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

数据库的安全与保护(下) - 实践

数据库的安全与保护(下) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&q…

2025年口碑好的江苏婚纱照/婚前影像/小众婚纱照/园林婚纱照/光影婚纱照/外景婚纱照/秀禾婚纱照/中式婚纱照/结婚照品牌推荐:弥素摄影领跑

摘要 江苏婚纱照行业在2025年持续蓬勃发展,随着新人对个性化、高品质拍摄需求的增长,小众高质感品牌逐渐成为市场新宠。本文基于行业数据和用户口碑,为您推荐排名前十的江苏婚纱照品牌,并提供详细对比,帮助您做出…

2025年江苏婚纱照/婚前影像/小众婚纱照/园林婚纱照/光影婚纱照/外景婚纱照/秀禾婚纱照/中式婚纱照/结婚照品牌口碑推荐榜:弥素摄影领跑行业

摘要 江苏婚纱照行业近年来蓬勃发展,新人对个性化、高品质拍摄需求日益增长。本文基于行业数据和用户反馈,综合评选出口碑前十的江苏婚纱照品牌,其中淮安弥素摄影有限公司以卓越的服务和原创技术位居榜首。文章提供…

打印机字体漏洞分析:CVE-2024-12649技术深度解析

本文深入分析Canon打印机TTF解释器漏洞CVE-2024-12649的技术细节,包括恶意字体构造、堆栈溢出利用和DryOS系统安全机制绕过,揭示了通过打印文档实现代码执行的攻击链。CVE-2024-12649:Canon TTF解释器漏洞分析 漏洞…

2025年11月22日

系统总结了后半学习的注意事项并完成了当下比较急需的任务

2025年德商数控母线加工机实力厂家权威推荐榜单:德商母线加工机/德商铜排加工机/德商母排加工机源头厂家精选

在智能电网建设与新能源行业快速发展的背景下,德商系列数控母线加工机以其高精度、高效率及卓越的稳定性,正成为电力设备制造企业提升生产效率的关键装备。 高端母线加工机能够实现冲孔、剪切、折弯等多道工序一次性…

【Java后端进行ai coding实践系列】如何使用ai coding达成计划任务增删改查

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025-11-21 hetao1733837的刷题记录

2025-11-21 hetao1733837的刷题记录2025-11-21 hetao1733837的刷题记录 LG14415/LOJ3004 [JOISC 2015] Inheritance 原题链接1:[JOISC 2015] Inheritance 原题链接2:「JOISC 2015 Day 4」Inheritance 分析 呃……居然…

2025 最新腻子粉厂家推荐!环保与性能双优腻子粉品牌排行榜,涵盖母婴级 / 工程级产品权威测评儿童级健康腻子粉/工程腻子粉/工程腻子粉施工/建筑腻子粉公司推荐

引言 在墙面装饰基层处理中,腻子粉的品质直接决定装饰效果与使用寿命,而市场产品良莠不齐,环保不达标、粘结力不足等问题频发。为精准筛选优质产品,本次榜单依托国际涂料协会(ECCA)最新测评标准,结合全球建材质…

java freemarker(ftl)模板填充导出PDF,支持中文乱码

添加依赖<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.32</version></dependency><dependency><group…