单调栈和单调队列专题

news/2025/2/23 16:39:05/文章来源:https://www.cnblogs.com/Dengyouk/p/18732351

单调栈和单调队列专题

简介

内容

通过时间复杂度为\(O(n)\)维护静态的区间最值,虽然是静态,但是时间比\(ST\)表和线段树更优秀。

实现

顾名思义,单调队列维护一个内部数据为单调的队列。采用合适的方式进行出队和入队操作,让每一个区间的最大、最小值就是队列的头或尾。与一般队列不一样的是,单调队列是一个双向队列,也就是可以在队列的头或尾进行出队入队操作。实现时可以使用数组模拟。

习题

T1 CF940E - Cashback

这个题就是在每次在更新的时候发现取用长度大于\(c\)时,就可以看成一个长度为\(c\)的区间加上一些单独的区间,一个长度大于\(2*c\)的区间可以通过变为两个单独的区间实现2更优,需要维护长度为\(c\)的最小值即可,采用\(dp\),但是我用了线段树。

Code
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,a[N],dp[N],minn[N<<2],sum[N],c; 
void build(int id,int l,int r){if(l==r){minn[id]=a[l];return ;}int mid=(l+r)>>1;build(id<<1,l,mid);build(id<<1|1,mid+1,r);minn[id]=min(minn[id<<1],minn[id<<1|1]);
}
int query(int id,int l,int r,int L,int R){if(L<=l&&r<=R)return minn[id];int mid=(l+r)>>1;int res=0x3f3f3f3f;if(L<=mid)res=min(res,query(id<<1,l,mid,L,R));if(R>mid)res=min(res,query(id<<1|1,mid+1,r,L,R));return res;
}
signed main(){//相必是一道dp的题目//现在这个块有几个是必不可少的//所以这题需要使用滚动数组? cin>>n>>c;for(int i=1;i<=n;i++)cin>>a[i],sum[i]=sum[i-1]+a[i],dp[i]=sum[i];build(1,1,n);for(int i=1;i<=n;i++){if(i>=c)dp[i]=min(dp[i],dp[i-c]+sum[i]-sum[i-c]-query(1,1,n,i-c+1,i));dp[i]=min(dp[i],dp[i-1]+a[i]);}cout<<dp[n];
}

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

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

相关文章

整数二分查找

整数二分 二分的本质不是单调性 有单调性一定可以二分 可以二分不一定有单调性 二分的本质是边界 -1记得+1 +1不用再补

输入菜单关键字,遍历匹配到 menuIds,展开 匹配节点 的所有父节点以及 匹配节点 本身,高亮 匹配节点

菜单检索,名称、地址、权限标志 等 关键字匹配、展开、高亮(全程借助 DeepSeek ) 便捷简洁的企业官网 的后台菜单管理,图示:改造点:(1)修改 bootstrapTreeTable 的节点class命名方式为:treegrid-{item[options.id]},即采用id作为节点的唯一标识; (2)展开所有父节点 …

动手学大模型应用开发,第5天:大模型评估

第一章、验证迭代的一般思路 根据前文所讲解的大模型开发流程,我们可以发现,以调用、发挥大模型为核心的大模型开发相较传统的 AI 开发更注重验证迭代。由于你可以快速构建出基于 LLM 的应用程序,在几分钟内定义一个 Prompt,并在几小时内得到反馈结果,那么停下来收集一千个…

AI大模型完全本地化部署指南——从零硬件开始

本文将从基础硬件购置开始讲起,真正意义上从零开始,最终通过Ollama、LangChain、DeepSeek的一系列交互,输出本地大模型的第一声啼鸣,带你走进另一片广阔的世界。update:2025-02-23硬件方面 主板选型:主机组装:P40显卡拆解,改散热:kali显卡驱动安装软件方面 ollama服务端…

juc-01-多线程基本知识

进程与线程的关系:一个进程由一到多个线程组成。线程是cpu最小的调度单位。 进程是资源分配的最小单位。 并行与并发:并行:同一时刻执行多个任务。 并发:同一时刻,微观串行,宏观并行,cpu极速切换执行线程。单核cpu,如果没有并发,则不能同时执行多个任务同步与异步:同…

OceanBase数据库实战:Windows Docker部署与DBeaver无缝对接

一、前言 OceanBase 是一款高性能、高可扩展的分布式数据库,适用于大规模数据处理和企业级应用。 随着大数据和云计算的普及,OceanBase 在企业数字化转型中扮演着重要角色。学习 OceanBase 可以帮助开发者掌握先进的分布式数据库技术,提升数据管理能力。使用 Docker 安装 Oc…

爬虫随笔(四) scrapy

声明本账号中的所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁,用于商业用途和非法用途,否则有此产生的一切后果均与作者无关! scrapy在使用scrapy前准备工作,首先在pycharm中运行 pip install scrap…

微信小程序自动生成二维码

1、下载包 npm i weapp-qrcode 安装完成之后,出现这个文件夹 2. 构建npm打开微信开发者工具,进入对应的小程序项目。点击菜单栏中的 “工具” -> “构建 npm” 。 构建完成后,会在项目中生成一个miniprogram_npm文件夹 3、页面中引用 在js中调用方法 先引用: 显示效果…

QT布局管理器(QVBoxLayout,QHBoxLayout)不同部分比例大小设置方法

QT布局管理器(QVBoxLayout,QHBoxLayout)不同部分比例大小设置方法默认情况如果将多个控件加入到QT的布局管理器中(QVBoxLayout、QHBoxLayout)所有控件占用的宽度/高度是等比例大小的。然后,在实际应用和开发中往往希望在同一个布局管理器中,根据控件实际显示内容的多少或…

哪吒探针V1:全新版安装

哪吒探针可以方便的帮助我们监控服务器性能。 本文为大家带来最新版v1的安装过程。 一、安装控制面板 运行一键安装脚本 curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && sudo CN=true ./nezha.sh这里我们…