在鹅厂工作的DJ开始训练起了鹅厂的企鹅们,现在DJ教小企鹅玩一个疯狂的游戏(危险游戏,小朋友请勿模仿)。

现在有一排小企鹅,从左到右编号为1....N,每个小企鹅有一个数字,每天早上,如果一个小企鹅发现他右边的小企鹅的数字比他的小,他就会消灭这个小企鹅。问到了第几天才会没有小企鹅可以被消灭,你需要输出天数-1的值

注:所有小企鹅的数字是1...N的排列

Input

每组数据输入格式如下:

第一行一个整数N (N<=10^6)

第二行N个整数,表示1...N号小企鹅的数字

Output

每组数据一行,每行一个整数表示输出天数-1的值

Sample Input

4
4 2 1 3

Sample Output

2

Hint

对于第一组数据:

DAY1:6 2 3 4 5

DAY2:6 3 4 5

DAY3:6 4 5

DAY4:6 5

DAY5:6

对于第二组数据:

DAY1:6 3 5

DAY2:6 5

DAY3:6

对于第三组数据:

DAY1:6

这么个题目卡了我快二十天。。。。

本题的思路就是仅对被删除元素进行维护,以便最终达到O(n)的复杂度模拟。

上代码吧,都写在注释里了。

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
const int size=1e6+5;
int arr[size],last[size],nxt[size];
int del[size];
int main()
{int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++) {scanf("%d",&arr[i]);nxt[i]=i+1;last[i]=i-1;}last[0]=n;nxt[n]=0;nxt[0]=1;del[0]=1;//构建双向链表 queue<int> q,p;for(int i=2;i<=n;i++){if(arr[i]<arr[i-1]){del[i]=1;//将所有第一轮就会被删除的东西打上标记并入队 q.push(i);}}int ans=0;while(!q.empty()){ans++;while(!q.empty()){int x=q.front();q.pop();if(last[x]&&nxt[x]&&del[last[x]]!=1&&del[nxt[x]]!=1&&arr[nxt[x]]<arr[last[x]]){p.push(nxt[x]);//被删除的元素全部入队 del[nxt[x]]=1;//所有被删除的打上标记 }nxt[last[x]]=nxt[x];last[nxt[x]]=last[x];//不论如何都将被删除的元素的前后元素连接起来 }q=p;while(!p.empty()) p.pop();}cout<<ans<<endl;}
} 

转载于:https://www.cnblogs.com/fly-white/p/10092739.html

疯狂的企鹅 CSU - 2147 (队列+双向链表维护)相关推荐

  1. D - 疯狂的企鹅 -思维

    D - 疯狂的企鹅 CSU - 2147 题意:每天早上,如果一个小企鹅发现他右边的小企鹅的数字比他的小,他就会消灭这个小企鹅.问到了第几天才会没有小企鹅可以被消灭,你需要输出天数-1的值. 思路 : ...

  2. linux wait函数头文件_手把手教Linux驱动9-等待队列waitq

    在上一篇<手把手教Linux驱动8-Linux IO模型>我们已经了解了阻塞.非阻塞.同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞. 应用场景: 当进程要获取某些资源 ...

  3. 队列Queue:任务间的消息读写,安排起来~

    摘要:本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十三 消息队列Queue>,作者:zhushy . 队列(Queue)是 ...

  4. LiteOS内核源码分析:消息队列Queue

    本文分享自华为云社区<LiteOS内核源码分析系列十 消息队列Queue>,原文作者:zhushy . 队列(Queue)是一种常用于任务间通信的数据结构.任务能够从队列里面读取消息,当队 ...

  5. 并发——抽象队列同步器AQS的实现原理

    一.前言 这段时间在研究Java并发相关的内容,一段时间下来算是小有收获了.ReentrantLock是Java并发中的重要部分,所以也是我的首要研究对象,在学习它的过程中,我发现它是基于抽象队列同步 ...

  6. 算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记

    算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记 前言 单调队列 场景举例(RMQ) 应用-维护区间最值的方式 数据结构-自行设计单调队列 代码实现(java) 例题分析(略) 总 ...

  7. 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)

    第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...

  8. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  9. 队列优化dijsktra(SPFA)的玄学优化

    转载:大佬博客 最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2​ 优化 对一些数 ...

最新文章

  1. linux查看节点使用进程后退出,Linux通过端口号查看使用进程-结束进程
  2. [转] domeOS 环境搭建 自动化构建部署
  3. python网上授课_python完整课程
  4. ARM Exploitation
  5. Android Platform Codenames, Versions, API Levels, and NDK Releases
  6. 文本分类的一种对抗训练方法
  7. virtualbox安装增强功能时【未能加载虚拟光盘】
  8. bilibili老版本_哔哩哔哩5.13.0旧版本下载-bilibili5.13.0旧版本下载v5.13.0旧版本-西西软件下载...
  9. 霍夫变换(Hough Transformation)基本思想及MATLAB相关函数
  10. Ext Gantt甘特图1.2破解及方法
  11. 12000字解读安踏:DTC中国化的“热血战纪”
  12. 7-10 分支结构——大小写字母判断 (70 分)
  13. 一键使 WIN 10进入休眠、睡眠、关机的命令
  14. 新浪微博短视频服务的优化实践
  15. 安信可ESP32-CAM摄像头开发demo--局域网拍照、实时视频、人脸识别
  16. 成绩管理系统课程设计
  17. SM2椭圆曲线公钥密码算法(Python实现)
  18. MAC 忘记MYSQL 账户和密码重置
  19. Pandas时间序列数据处理和datetime模块详细教程
  20. OA系统:实现添加岗位

热门文章

  1. 安化云台山风景区旅游攻略必去的景点
  2. iOS 取相册照片/打开相机
  3. 大学生数学建模题论文
  4. 表面粗糙度的基本评定参数是_表面粗糙度评定粗糙度三个评定参数的含义是什么...
  5. 不止阻击高通,亿咖通还想成为「下个华为车BU」
  6. 前端入门之(vuex源码解析三)
  7. 这个“看不见”的机器人,或许就是你未来的同事
  8. 7-1 创建一个倒数计数线程
  9. php 猴子补丁,如何解决Composer安装/更新错误:VirtualAlloc()失败:[0x00000008]
  10. 无线AP的注册上线方式