在鹅厂工作的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. C++二维数组名与数组指针的思考
  2. 辽师836c语言真题,2018年武汉科技大学考研真题硕士研究生入学考试试题
  3. 记得把每一次面试当做经验积累,深夜思考
  4. 强悍的 ubuntu —— 窗口界面管理与设置
  5. 四年,新华三安全大变样
  6. java整除符号是什么意思_java除法及java除法运算的基础知识
  7. Windows11显示网速
  8. 【中间件技术】第四部分 Web Service规范(10) Web Service规范
  9. 2021-2027全球与中国5G核心网市场现状及未来发展趋势
  10. HashMap为什么用红黑树而不用跳表?redis的zset为什么用跳表而不用红黑树?
  11. 宝塔设置A站点SSL,同服务器下其他未设SSL站点访问HTTPS默认会打开A站点
  12. Windows NT引导过程源代码分析
  13. GST1212M非制冷红外探测器调试成像
  14. 电脑重装系统UEFI启动如何设置
  15. 超火表白代码,心心(html+css)
  16. 中国书法艺术会消亡吗?
  17. #边学边记 必修4 高项:对事的管理 第5章 项目成本管理 之 项目成本预算
  18. TOMCAT/JS/CSS/JavaWeb/浏览器老是加载缓存/谷歌浏览器/微软浏览器/刷新键都按烂了/无法加载样式解决办法之一
  19. i9500android操作系统跑流量,手机流量去哪了 横评显示360手机卫士成节流王
  20. 脚本录制工具__UIRecorder使用说明文档

热门文章

  1. 创意大会与当地学校持续游戏
  2. pandas处理excel表格的工作流
  3. Android L API Overview
  4. 12306客户端实现后的总结
  5. 手机客户端与服务器通信协议,手机客户端与服务器通信协议
  6. 详解RGB和YUV色彩空间转换
  7. 计算机科学与技术毕业论文指导,计算机科学与技术业毕业论文指导.doc
  8. lisp 暖通设计_应用AutoLISP开发空调风管绘制实用程序
  9. 超文本(Hypertext)
  10. 疑难杂症篇(二)--MATLAB中“未定义函数或变量 ‘bd_asymp‘”问题的解决方案