博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单调队列
阅读量:7236 次
发布时间:2019-06-29

本文共 830 字,大约阅读时间需要 2 分钟。

例题

LuoguP1440题目描述

一个含有n项的数列(n<=2000000),求出每一项前的m个数到它这个区间内的最小值。若前面的数不足m项则从第1个数开始,若前面没有数则输出0。

---------------------------------------------------------------------------------------------------------

裸单调队列

front-tail闭区间

q保存的是a数组中下标

1.更新区间长度

while(q[front]

2.插入新元素

while(a[q[tail]]>a[i]&&tail>=front) tail--;q[++tail]=i;

 

#include
#include
#include
using namespace std;const int N=2000005;inline int read(){ char c=getchar(); int x=0,f=1; while(c<'0'||c>'9'){
if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}int n,m,a[N];int q[N],front=1,tail=0;int main(){ n=read();m=read(); for(int i=1;i<=n;i++) a[i]=read(); for(int i=1;i<=n;i++){ while(q[front]
a[i]&&tail>=front) tail--; q[++tail]=i; }}

 

转载地址:http://xnlfm.baihongyu.com/

你可能感兴趣的文章
Win8Metro(C#)数字图像处理--2.31灰度拉伸算法
查看>>
搭建 LAMP 环境
查看>>
Mybatis基于接口注解配置SQL映射器(二)
查看>>
如何监控和保护Linux下进程安全
查看>>
linux kvm虚拟机配置及常见问题处理
查看>>
安装Heartbeat-glue,绝对全,自己亲自操作的。
查看>>
zip压缩工具、tar打包、打包并压缩
查看>>
接口中图片的接收
查看>>
android不要全屏保留状态栏
查看>>
java.lang.UnsupportedClassVersionError
查看>>
捕捉到的CRS错误提示
查看>>
Linux系统安装需要注意几处
查看>>
mysql读写分离
查看>>
创建远程git仓库
查看>>
linux 文件查找帮助命令 , 查看网络链接信息, 历史命令
查看>>
centos 分区扩容
查看>>
ActiveMQ Tips
查看>>
linux日常维护(网络相关,防火墙,netfirter介绍,netfirter语法)
查看>>
keepalived双机热备nginx
查看>>
深入Nginx优化
查看>>