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

单调队列

时间:2023-11-13 17:25:34浏览次数:30  
标签:队列 tt ++ int hh 单调

acwing 154滑动窗口,单调队列q 存的是下标,真正的值需要再套一个a数组

 1 #include<iostream>
 2 using namespace std;
 3 
 4 const int N = 1e6 + 10;
 5 
 6 int n,k;
 7 int a[N],q[N]; //q代表单调队列
 8 
 9 int main()
10 {
11     scanf("%d%d", &n,&k);
12     for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
13     
14     int hh = 0,tt = -1;
15     for (int i = 0; i < n; i ++ )
16     {
17         //判断队头是否已经弹出队列
18         if(hh <= tt && i - k + 1 > q[hh]) hh ++; //头出窗口 hh向前移动一格;
19         while(hh <= tt && a[q[tt]] >= a[i]) tt --; // 若不满足单调性,那么将队尾元素删除;
20         q[ ++tt] = i; //将元素添加到队尾
21         if(i >= k - 1) printf("%d ",a[q[hh]]);
22     }
23     puts(" ");
24     
25     hh = 0,tt = -1;
26     for (int i = 0; i < n; i ++ )
27     {
28         if(hh <= tt && i - k + 1 > q[hh]) hh ++;
29         while(hh <= tt && a[q[tt]] <= a[i]) tt --;
30         q[ ++tt] = i;
31         if(i >= k - 1) printf("%d ",a[q[hh]]);
32     }
33     puts(" ");
34     
35     return 0;
36 }
View Code

 

标签:队列,tt,++,int,hh,单调
From: https://www.cnblogs.com/rw666/p/17829588.html

相关文章

  • 决策单调性
    定义顾名思义,就是说在DP取最值的过程中选的转移点\(j\)是单调的。只要有这个性质,就可以优化枚举转移的复杂度。充要条件\[f_i=\text{最值}(g_j+w(j+1,i))\]\(w\)满足四边形不等式。这里以取\(\min\)为例。假设有决策点\(j_1<j_2\),\(w\)满足四边形不等式等价于\(\De......
  • 高效利用队列的空间
      大家都知道队列是可以用数组来模拟的,可以先开辟一段定长的数组空间,然后分别使用两个变量head和tail来代指队列的头和尾,从而维护整个队列,相信到这里大家都比较熟悉。不过这种做法是有弊端的,比如说下图这种情况  假设经过不断地增删元素,Head和Tail已经来到了数组最后两个位......
  • 【chatgpt问答记录】双端队列、栈和函数调用栈
    collections.deque和queue.Queue的区别Q:collections.deque()跟queue.Queue()有什么区别?collections.deque()和queue.Queue是两种不同的数据结构,它们有一些区别:实现方式:collections.deque()是Python标准库提供的双端队列数据结构,使用双向链表实现,具有高效的在两端进行......
  • 数据结构-队列
    一、概念1、队列的定义队列是仅限在一端进行插入,另一端进行删除的线性表。队列又被称为先进先出(FirstInFirstOut)的线性表,简称FIFO。2、队首允许进行元素删除的一端称为队首3、队尾允许进行元素插入的一端称为队尾二、接口1、可写接口(1)数据入队队列的插入操作,叫做入队。它是......
  • 数组&队列&关联数组的总结
    定宽数组:可以直接赋值,也可以先声明再赋值其中还有多维数组intarray2[0:7][0:3];intarray3[8][4];//先个后位intascend[4]='{0,1,2,3};intdescend[5];descend='{4,3,2,1,0};descend[0:2]='{5,6,7};ascend='{4{8}};descend='{9,8,default:-1};数组的声明全在左......
  • Kafka队列
    ......
  • Redis队列和阻塞队列
    redis队列的优点是轻量级,业务足够简单时不需要使用rabbitMq这样专业的消息中间件;缺点是弹出队列中的元素时,即使该消息处理失败也无法再次进行消费Redis队列List简单演示如下普通的redis队列,为了实现业务,通常会使用while进行循环,这样的话没有消息时依旧会频繁的执行循环,造成cpu的......
  • BlockingQueue队列详解
    /**本例介绍一个特殊的队列:BlockingQueue,如果BlockQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会被唤醒.同样,如果BlockingQueue是满的,任何试图往里存东西的操作也会被阻断进入等待状态,直到BlockingQueue里有空间才会被......
  • 04-栈和队列
    4.栈和队列栈:push,pop,peek(返回当前值),empty队列:add,remove,peek(返回当前值),isEmpty4.1双向链表实现栈和队列4.2数组实现栈和队列加一个指针指向某个位置。队列:环形数组4.3最小栈1.题目https://leetcode.cn/problems/min-stack/设计一个支持push,pop,top操作,并能在常数......
  • 第二节:队列详解 和 面试题剖析
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......