信奥赛C++提高组csp-s之倍增算法

信奥赛C++提高组csp-s之倍增算法

倍增算法核心思想讲解

1. 什么是倍增?

“倍增”,顾名思义,就是成倍地增加。它的核心思想是:不是一步一步地处理问题,而是将每一步的“步长”以2的幂次(1, 2, 4, 8…)进行跳跃式处理

2. 为什么倍增有效?
  • 高效性:通过二进制划分,可以将一个线性过程的时间复杂度从 O(N) 优化到 O(logN)。
  • 可行性:任何整数都可以用二进制数表示。这意味着,从起点到终点的任意一个长度,我们都可以通过2^k1 + 2^k2 + ...的跳跃方式到达。
  • 预处理:倍增算法通常需要先进行预处理,计算出一些“跳跃点”的信息,以便在查询时能够快速组合。
3. 倍增的通用步骤
  1. 定义状态f[i][j]通常表示从i这个点出发,走2^j步(或者进行2^j次操作)后所到达的状态。这个“状态”可以是到达的位置、区间的最值、区间和等。
  2. 预处理(DP填充):这是算法的关键。我们利用递推关系来填充这个f数组(也称为ST表、DP表)。
    • 边界条件f[i][0]表示从i走 1 (2^0) 步后的状态。这是初始的、已知的数据。
    • 递推公式f[i][j] = f[ f[i][j-1] ][j-1]。这个公式是倍增的灵魂!它的意思是:i2^j步到达的点,等价于从i先走2^(j-1)步,到达一个中间点f[i][j-1],然后再从这个中间点走2^(j-1)
  3. 查询/执行:对于一次查询,比如“从点uk步会到哪?”,我们将k分解成二进制。例如k = 13 = 8 + 4 + 1(二进制1101)。那么我们就依次走 8 步、4 步、1 步。每一步的跳跃都可以直接从我们预处理好的f数组中 O(1) 获取。

案例:ST 表 & RMQ 问题

题目描述

给定一个长度为N NN的数列,和 $ M $ 次询问,求出每一次询问的区间内数字的最大值。

输入格式

第一行包含两个整数N , M N,MN,M,分别表示数列的长度和询问的个数。

第二行包含N NN个整数(记为a i a_iai),依次表示数列的第i ii项。

接下来M MM行,每行包含两个整数l i , r i l_i,r_ili,ri,表示查询的区间为[ l i , r i ] [l_i,r_i][li,ri]

输出格式

输出包含M MM行,每行一个整数,依次表示每一次询问的结果。

输入输出样例 #1
输入 #1
8 8 9 3 1 7 5 6 0 8 1 6 1 5 2 7 2 6 1 8 4 8 3 7 1 8
输出 #1
9 9 7 7 9 8 7 9
说明/提示

对于30 % 30\%30%的数据,满足1 ≤ N , M ≤ 10 1\le N,M\le 101N,M10

对于70 % 70\%70%的数据,满足1 ≤ N , M ≤ 10 5 1\le N,M\le {10}^51N,M105

对于100 % 100\%100%的数据,满足1 ≤ N ≤ 10 5 1\le N\le {10}^51N1051 ≤ M ≤ 2 × 10 6 1\le M\le 2\times{10}^61M2×106a i ∈ [ 0 , 10 9 ] a_i\in[0,{10}^9]ai[0,109]1 ≤ l i ≤ r i ≤ N 1\le l_i\le r_i\le N1liriN

AC代码

#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+10;// 定义最大数组长度intn,m;// n: 数列长度, m: 询问个数inta[N];// 存储原始数列intst[N][17];// ST表,st[i][j]表示从位置i开始,长度为2^j的区间最大值intmain(){cin>>n>>m;// 读入数列并初始化ST表第一层for(inti=1;i<=n;i++){scanf("%d",&a[i]);st[i][0]=a[i];// 长度为1的区间最大值就是元素本身}// 构建ST表for(intj=1;j<=17;j++){// j表示区间长度为2^jfor(inti=1;i+(1<<j)-1<=n;i++){// i为区间起点// 将区间[i, i+2^j-1]分成两个长度为2^(j-1)的子区间// 取两个子区间最大值的较大者作为当前区间的最大值st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);}}// 处理每个查询while(m--){intl,r;scanf("%d%d",&l,&r);// 计算区间长度的对数(向下取整)ints=log2(r-l+1);// 查询区间最大值:将区间分成可能有重叠的两部分// [l, l+2^s-1] 和 [r-2^s+1, r]intans=max(st[l][s],st[r-(1<<s)+1][s]);printf("%d\n",ans);}return0;}

功能分析

使用ST表(Sparse Table)解决区间最大值查询(RMQ)

核心思想:
  • 预处理:构建一个二维数组st,其中st[i][j]存储从位置i开始,长度为2^j的区间内的最大值
  • 查询:对于任意区间[l, r],可以将其分解为两个可能有重叠的区间,取这两个区间最大值的较大者
算法步骤:
  1. 初始化

    • st[i][0] = a[i](长度为1的区间最大值就是元素本身)
  2. 构建ST表

    • 使用动态规划思想,st[i][j] = max(st[i][j-1], st[i+2^(j-1)][j-1])
    • 即将大区间分成两个小区间,取两者的最大值
  3. 查询处理

    • 对于区间[l, r],计算s = log2(r-l+1)(区间长度的对数)
    • 查询结果 =max(st[l][s], st[r-2^s+1][s])
复杂度分析:
  • 预处理:O(N log N)
  • 单次查询:O(1)
  • 总复杂度:O(N log N + M)
优势:
  • 查询速度极快(O(1)),适合处理大量查询
  • 代码简洁,实现相对容易
适用场景:
  • 静态数据(数据不修改)
  • 查询次数远大于数据修改次数
  • 需要快速响应大量区间查询

更多系列知识,请查看专栏:《信奥赛C++提高组csp-s知识详解及案例实践》:
https://blog.csdn.net/weixin_66461496/category_13113932.html


各种学习资料,助力大家一站式学习和提升!!!

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"########## 一站式掌握信奥赛知识! ##########";cout<<"############# 冲刺信奥赛拿奖! #############";cout<<"###### 课程购买后永久学习,不受限制! ######";return0;}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转


GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

#include<bits/stdc++.h>usingnamespacestd;intmain(){cout<<"跟着王老师一起学习信奥赛C++";cout<<" 成就更好的自己! ";cout<<" csp信奥赛一等奖属于你! ";return0;}

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

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

相关文章

Keil5芯片包下载在PLC开发中的应用

从零构建工业级软PLC&#xff1a;Keil5芯片包下载的实战意义你有没有遇到过这种情况——满怀信心地打开Keil新建工程&#xff0c;准备为一块STM32F407写代码&#xff0c;结果在设备选择界面翻遍列表也找不到目标型号&#xff1f;或者编译时突然报错“undefined symbol: SystemI…

《小城大事》热度持续高走,黄晓明号召力再次显现

自1月10日登陆央视电视剧频道&#xff08;CCTV-8&#xff09;黄金档并在腾讯视频同步播出以来&#xff0c;《小城大事》在播出一周内保持了稳定的市场表现。收视数据、平台热度与行业讨论度持续走高&#xff0c;成为2026年开年阶段最受关注的电视剧作品之一。在当前剧集市场竞争…

Open-AutoGLM能力测评:文本、图像、操作理解多维评估

Open-AutoGLM能力测评&#xff1a;文本、图像、操作理解多维评估 1. 引言&#xff1a;智谱开源的手机端AI Agent框架 随着大模型技术向终端设备下沉&#xff0c;AI智能体&#xff08;Agent&#xff09;在移动场景中的应用正逐步从概念走向落地。Open-AutoGLM 是由智谱AI推出的…

CAM++音频预处理:重采样至16kHz标准化流程

CAM音频预处理&#xff1a;重采样至16kHz标准化流程 1. 技术背景与问题提出 在语音识别和说话人验证系统中&#xff0c;输入音频的格式一致性是确保模型准确推理的关键前提。CAM 作为一款基于深度学习的中文说话人验证系统&#xff0c;其训练数据统一采用 16kHz 采样率的 WAV…

通义千问2.5-7B智能写作:新闻稿生成实战

通义千问2.5-7B智能写作&#xff1a;新闻稿生成实战 1. 背景与应用场景 在内容创作日益高频的今天&#xff0c;自动化、高质量的文本生成已成为媒体、公关、营销等领域的核心需求。新闻稿作为信息传递的重要载体&#xff0c;要求语言规范、结构清晰、信息准确&#xff0c;且需…

NewBie-image-Exp0.1工具测评:Diffusers+Transformers集成体验指南

NewBie-image-Exp0.1工具测评&#xff1a;DiffusersTransformers集成体验指南 1. 引言 随着生成式AI在图像创作领域的持续演进&#xff0c;基于扩散模型&#xff08;Diffusion Models&#xff09;的动漫图像生成技术正逐步迈向高保真、可控性强的新阶段。然而&#xff0c;从零…

无障碍应用开发:IndexTTS2视障辅助阅读系统搭建

无障碍应用开发&#xff1a;IndexTTS2视障辅助阅读系统搭建 1. 引言 随着人工智能技术的不断演进&#xff0c;语音合成&#xff08;Text-to-Speech, TTS&#xff09;在无障碍服务中的应用日益广泛。对于视障人群而言&#xff0c;高质量的语音辅助系统是获取信息、提升生活质量…

ACE-Step音乐生成实战:小白10分钟上手,云端GPU按需付费

ACE-Step音乐生成实战&#xff1a;小白10分钟上手&#xff0c;云端GPU按需付费 你是不是也遇到过这样的情况&#xff1f;大学社团要做一支原创主题曲&#xff0c;大家集思广益写好了歌词、定了风格&#xff0c;甚至想好了MV画面&#xff0c;结果一卡在“作曲”这一步——没人会…

保姆级教程:用通义千问3-14B微调专属AI助手

保姆级教程&#xff1a;用通义千问3-14B微调专属AI助手 1. 引言 随着大模型技术的快速发展&#xff0c;通用语言模型在多个领域展现出强大能力。然而&#xff0c;在特定业务场景下&#xff0c;通用模型的回答往往缺乏个性化和精准性。为解决这一问题&#xff0c;模型微调&…

FSMN VAD中文语音检测优势:对比传统算法的三大突破

FSMN VAD中文语音检测优势&#xff1a;对比传统算法的三大突破 1. 引言&#xff1a;语音活动检测的技术演进与挑战 语音活动检测&#xff08;Voice Activity Detection, VAD&#xff09;是语音信号处理中的基础模块&#xff0c;广泛应用于语音识别、会议转录、电话录音分析等…

树的练习1--------965单值二叉树

前言 终于度过期末周啦&#xff0c;我要尽快把我的节奏调整过来&#xff0c;留给我的时间不多啦&#xff0c;我的学习和生活模式需要大改变&#xff0c;我需要通过自己清晰的头脑&#xff0c;让环境顺于我去发展&#xff0c;或者说我可以改变思路&#xff0c;改变自己去适应这…

如何用自然语言分割任意物体?sam3大模型镜像快速上手指南

如何用自然语言分割任意物体&#xff1f;sam3大模型镜像快速上手指南 在计算机视觉领域&#xff0c;图像分割一直是核心任务之一。传统方法依赖大量标注数据和特定场景训练&#xff0c;而随着大模型技术的发展&#xff0c;SAM3&#xff08;Segment Anything Model 3&#xff0…

AI Agent 在汽车上的典型应用场景,研发入门

汽车领域&#xff0c;AI Agent 通常以 “多智能体协同” 的形式存在。从近两年开始&#xff0c;AI Agent 在汽车上正从单点功能升级为全链路场景化智能中枢。 系统总结了AI Agent 在汽车行业的应用&#xff0c;覆盖智能座舱、自动驾驶、车联网服务与车辆运维四大领域&#xff0…

PyTorch-2.x镜像让多版本CUDA切换变得异常简单

PyTorch-2.x镜像让多版本CUDA切换变得异常简单 1. 背景与痛点&#xff1a;深度学习环境配置的“地狱模式” 在深度学习开发过程中&#xff0c;环境配置往往是开发者面临的首要挑战。尤其是当项目依赖特定版本的PyTorch、CUDA和Python时&#xff0c;稍有不慎就会陷入“版本不兼…

YOLOv8视频分析实战:云端GPU处理4K视频不卡顿

YOLOv8视频分析实战&#xff1a;云端GPU处理4K视频不卡顿 你是不是也遇到过这样的情况&#xff1f;作为一名视频博主&#xff0c;手头有大量高清影视素材想做内容分析——比如统计某个角色出镜次数、识别画面中的物体变化、提取精彩片段。你想用当前最火的目标检测模型 YOLOv8…

TouchGFX入门必读:官方Demo分析解读

TouchGFX实战入门&#xff1a;从官方Demo看透嵌入式GUI的底层逻辑 你有没有遇到过这样的场景&#xff1f;项目需要做一个带动画、有触控反馈的彩色TFT界面&#xff0c;主控是STM32F4或H7系列&#xff0c;但团队里没人真正搞懂TouchGFX怎么用。网上搜一圈&#xff0c;不是零散的…

AI隐私卫士深度测评:打码效果/速度/价格全面对比

AI隐私卫士深度测评&#xff1a;打码效果/速度/价格全面对比 作为一名政务新媒体小编&#xff0c;你是否经常被这样的问题困扰&#xff1a;每次发布单位活动照片时&#xff0c;领导反复强调“群众隐私必须保护”&#xff0c;但又要求“画面要自然、不能影响传播效果”。于是你…

测试开机启动脚本Go语言微服务注册与发现机制

测试开机启动脚本Go语言微服务注册与发现机制 1. 引言&#xff1a;微服务架构下的服务治理挑战 在现代分布式系统中&#xff0c;微服务架构已成为构建高可用、可扩展应用的主流范式。随着服务数量的增长&#xff0c;如何实现服务的自动注册与发现成为关键问题。尤其是在容器化…

学长亲荐2026 TOP9 AI论文写作软件:专科生毕业论文全攻略

学长亲荐2026 TOP9 AI论文写作软件&#xff1a;专科生毕业论文全攻略 2026年AI论文写作软件测评&#xff1a;专科生毕业论文的高效助手 随着AI技术在学术领域的深入应用&#xff0c;越来越多的专科生开始借助AI工具提升论文写作效率。然而&#xff0c;面对市场上琳琅满目的论文…

会议记录助手:FSMN-VAD实现发言时段自动提取

会议记录助手&#xff1a;FSMN-VAD实现发言时段自动提取 1. 引言 1.1 业务场景与痛点分析 在日常工作中&#xff0c;会议录音的整理是一项耗时且重复性高的任务。传统方式需要人工逐段听取音频&#xff0c;手动标记每位发言人的讲话起止时间&#xff0c;并进行转录。这种方式…