首页 > 其他分享 >单调队列

单调队列

时间:2023-08-03 13:34:31浏览次数:43  
标签:队尾 队列 元素 qmax number int 单调

一个支持在队尾插入,队头和队尾删除的队列,整个队列呈单调性

如果要求最大值则维护一个递减的单调队列,最小值则递增

用deque写很方便(前几天用数组模拟队列 代码调不出bug难受死了)

例题 P1886 滑动窗口

思路:

用一个deque,存点的序号(用于判断是否过期)和点的数字。每次新增加一个元素,都要判断

1.前面的点是否过期,过期弹出

2.新加入元素是否比队尾元素的数字大,若大 新加入的元素既时间上比队尾元素更优,数字上也更优,那么弹出队尾元素,一直弹到找到一个比新元素更大的队尾元素或队列为空为止(求最大值的情况)

然后每次输出即可

代码:

#include<iostream>
#include<cstdio>
#include<deque>
using namespace std;
struct node{
    int tim,number;
}; 
deque<node> qmin,qmax;
const long long N=1e6+10;
int n,k,a[N],ansmin[N],ansmax[N],cnt=0;
int main(){
    scanf("%d%d",&n,&k);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=n;i++){
        while(!qmin.empty()&&qmin.front().tim<(i-k+1)) qmin.pop_front();
        while(!qmax.empty()&&qmax.front().tim<(i-k+1)) qmax.pop_front();
        while(!qmin.empty()&&qmin.back().number>a[i]) qmin.pop_back();
        while(!qmax.empty()&&qmax.back().number<a[i]) qmax.pop_back();
        node h;
        h.number=a[i];
        h.tim=i;
        qmax.push_back(h);
        qmin.push_back(h);
        if(i>=k){
            ansmin[++cnt]=qmin.front().number;
            ansmax[cnt]=qmax.front().number;
        }
    }
    for(int i=1;i<=cnt;i++){
        printf("%d ",ansmin[i]);
    }
    printf("\n");
    for(int i=1;i<=cnt;i++){
        printf("%d ",ansmax[i]);
    }
    return 0;
} 

最近一直在看板子,但感觉学了新东西之后并不能把他们综合运用到一个题上(本来也什么都不会呢=D),可能需要多加练习?还是我脑子太笨了TT

标签:队尾,队列,元素,qmax,number,int,单调
From: https://www.cnblogs.com/dgdger/p/17603076.html

相关文章

  • redis stream做轻量级消息队列的可行性
    背景对于消息数量很少的场景,尝试使用redisstream来做消息队列.为什么要用redis的stream,redis的其他数据结构可以吗?参考文章1:https://www.zhihu.com/question/43688764?sort=created参考文章2:https://www.cnblogs.com/williamjie/p/11201654.htmlredis有一些机制有队......
  • kratos项目中使用kafka实现延迟队列
    项目地址https://gitee.com/huoyingwhw/kratos_kafkaB站视频地址B站视频地址——kratos项目中使用kafka实现延迟队列......
  • 消息队列详解
    文章目录1、什么是消息队列2、消息队列特点3、消息队列的的传输模式4、常用的消息队列1、什么是消息队列消息队列一般简称为MQ(MessgesQueue),是指利用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成,是在消息的传输过程中保存消息的容器。......
  • scrapy源码分析:redis分布式爬虫队列中,priority值越大,优先级越高
    scrapy源码分析:redis分布式爬虫队列中,priority值越大,优先级越高一、背景scrapy爬虫项目中,遇到scrapy的priority属性,搞不懂priority的值越大优先级越高,还是值越小优先级越高#通过priority修改优先级returnscrapy.Request(url=request.url,dont_filter=True,callback=spider......
  • 网卡校准:调整网卡的 Buffer size 与网卡队列
    调整Buffersize操作:使用ethtool命令可以调整网卡的Buffersize。例如,要调整eth0网卡的接收缓冲区大小为4096字节,可以执行以下命令:ethtool-Geth0rx4096作用:网卡的Buffersize决定了网卡能够缓存的数据包数量和大小。较大的Buffersize可以提高网络吞吐量和性能,尤......
  • Linux KVM 网卡配置多队列
    网卡多队列查看系统是否支持lspci-vvv|grepEth-A30#有MSI-X说明系统支持查看网卡是否支持ethtool-leth0#Combined不为0说明支持设置网卡ethtool-Leth0combined<队列数量>确认是否生效ls/sys/class/net/eth0/queuesKVM虚拟机配置xml......
  • 队列(Queue)
    用途1.访问资源的时候(比如几个电脑让同一个打印机进行打印)请求会被存在一个队列中,cpu处理进程也是一样的。实现1.循环数组方式实现classarray_queue{intfront=-1,rear=-1;//队列的头指针和尾指针intsize;int*array=nullptr;public:array_queue(ints......
  • 剑指 Offer 59 - II. 队列的最大值(中等)
    题目:classMaxQueue{public:deque<int>que1;//使用两个双端栈(deque和queue不一样,用deque就行)deque<int>que2;MaxQueue(){}intmax_value(){returnque2.empty()?-1:que2.front();}voidpush_back(intv......
  • redis做消息队列学习
    转自:https://juejin.cn/post/7094272373930590245#heading-9,https://zhuanlan.zhihu.com/p/3442697371、消息队列基本作用:应用解耦(作为中介)、削峰填谷。redis做mq的优点:轻量级,使用和运维成本低。mq的3个基本要求:消息保序sequence:对应消息需要有序消费的场景;处理重复消息dupl......
  • 语音合成技术汇总1:Glow-TTS:通过单调对齐实现文本到语音的生成流
    今天开始开一期语音合成经典论文的翻译Glow-TTS:通过单调对齐实现文本到语音的生成流摘要:最近,文本到语音(Text-to-Speech,TTS)模型,如FastSpeech和ParaNet,被提出以并行方式从文本生成mel频谱图(mel-spectrograms)。尽管并行TTS模型具有优势,但它们不能在没有自回归TTS模型作为外部对齐......