当前位置: 首页 > news >正文

单调栈、单调队列

单调栈

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5+9;
ll a[N];
ll l[N];
int main()
{
  int n;cin>>n;
  for(int i=1;i<=n;i++)cin>>a[i];
  stack<int>stk;
  for(int i=1;i<=n;i++)
  {
      while(stk.size()&&stk.top()>=a[i])stk.pop();//如果前边的数比后边要加进来的数大或等于,就出栈
      if(stk.empty())l[i]=-1;//栈空说明没有比要加进来的数小的数
      else
      {
        l[i]=stk.top();//如果栈不为空,说明栈顶元素就是第一个比要加进来数小的数
      }
      stk.push(a[i]);//将数入栈
  }
  for(int i=1;i<=n;i++)
  {
    cout<<l[i]<<' ';
  }
 
  return 0;
}

单调队列

                           

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5+9;
ll a[N];
int main()
{
   int n,k;cin>>n>>k;
   for(int i=1;i<=n;i++)cin>>a[i];
   //构造deque队列
   //以i为右端点[i-k+1,i]
   deque<int>dq;
   for(int i=1;i<=n;i++)
   {
      //判断队头合法性
      while(dq.size()&&dq.front()<=i-k)dq.pop_front();//判断队头元素是否在当前滑动窗口内,如果不在,则将队头元素弹出。
      //判断队尾优越性
      while(dq.size()&&a[dq.back()]<=a[i])dq.pop_back();//维护队列的单调性,若队尾元素小于等于当前元素,则将队尾元素弹出。
      dq.push_back(i);
      if(i>=k)cout<<a[dq.front()]<<' ';
   }
   cout<<'\n';
   //清空容器
   while(dq.size())
   {
      dq.pop_front();
   }
   //求最小值
   for(int i=1;i<=n;i++)
   {
      while(dq.size()&&dq.front()<=i-k)dq.pop_front();
      while(dq.size()&&a[dq.back()]>a[i])dq.pop_back();
      dq.push_back(i);
      if(i>=k)cout<<a[dq.front()]<<' ';
   }
   
    return 0;
}

相关文章:

  • 目标检测Anchor-based 与 Anchor-free
  • 【Linux内核系列】:深入理解缓冲区
  • 用ABBYY PDF Transformer+对PDF的创建编辑转换和注释等操作
  • 【实战ES】实战 Elasticsearch:快速上手与深度实践-6.2.2GDPR数据脱敏处理
  • BUUCTF [GUET-CTF2019]soul sipse 1
  • 我与DeepSeek读《大型网站技术架构》(8)- 信息过滤与反垃圾
  • linux内存页块划分及位图存储机制
  • 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
  • pdf修改内容:分享5款好用的工具
  • 从0开始的操作系统手搓教程45——实现exec
  • 实时采集到的语音进行语音识别
  • Spring(2)——Cookie和Session
  • 【时间序列聚类】Feature-driven Time Series Clustering(特征驱动的时间序列聚类)
  • 008-Trae换用DeepSeek后编程能力大幅提升至中级水平
  • Python 实现非对称加密的 A 端和 B 端软件的详细步骤及代码示例
  • Python 实现机器学习的 房价预测回归项目
  • 【算法学习之路】8.栈和队列
  • Flutter中使用NetworkImage加载网络图片缓存问题学习实践
  • HTML 学习路线图
  • !C++中的位运算
  • 重庆党政代表团在沪考察,陈吉宁龚正与袁家军胡衡华共商两地深化合作工作
  • 新消费观察| 零售品牌 “走出去” ,如何开辟“新蓝海”?
  • 吴清稳市场稳预期发布会十要点:谈平准基金、股市稳定、公募改革和巴菲特
  • 一网红被指涉脱衣殴打霸凌事件,沈阳警方:刑拘1人,处罚5人
  • 五一假期上海楼市延续向好态势,成交量同比增加36%
  • 竞彩湃|巴萨客场淘汰国际米兰,巴黎双杀阿森纳