疯狂的企鹅 CSU - 2147 (队列+双向链表维护)
在鹅厂工作的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 (队列+双向链表维护)相关推荐
- D - 疯狂的企鹅 -思维
D - 疯狂的企鹅 CSU - 2147 题意:每天早上,如果一个小企鹅发现他右边的小企鹅的数字比他的小,他就会消灭这个小企鹅.问到了第几天才会没有小企鹅可以被消灭,你需要输出天数-1的值. 思路 : ...
- linux wait函数头文件_手把手教Linux驱动9-等待队列waitq
在上一篇<手把手教Linux驱动8-Linux IO模型>我们已经了解了阻塞.非阻塞.同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞. 应用场景: 当进程要获取某些资源 ...
- 队列Queue:任务间的消息读写,安排起来~
摘要:本文通过分析鸿蒙轻内核队列模块的源码,掌握队列使用上的差异. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十三 消息队列Queue>,作者:zhushy . 队列(Queue)是 ...
- LiteOS内核源码分析:消息队列Queue
本文分享自华为云社区<LiteOS内核源码分析系列十 消息队列Queue>,原文作者:zhushy . 队列(Queue)是一种常用于任务间通信的数据结构.任务能够从队列里面读取消息,当队 ...
- 并发——抽象队列同步器AQS的实现原理
一.前言 这段时间在研究Java并发相关的内容,一段时间下来算是小有收获了.ReentrantLock是Java并发中的重要部分,所以也是我的首要研究对象,在学习它的过程中,我发现它是基于抽象队列同步 ...
- 算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记
算法学习 (门徒计划)4-1 单调队列及经典问题及经典例题 学习笔记 前言 单调队列 场景举例(RMQ) 应用-维护区间最值的方式 数据结构-自行设计单调队列 代码实现(java) 例题分析(略) 总 ...
- 408考研数据结构与算法之数组、链表、队列、栈知识点和算法详细教程(更新中)
第一章:数据结构与算法概述 因为数据结构作为计算机专业的专业基础课程,是计算机考研的必考科目之一,如果打算报考计算机专业的研究生,你必须学好它. 数据结构是计算机软考.计算机等级考试等相关考试的必考内 ...
- 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈sv(e) ...
- 队列优化dijsktra(SPFA)的玄学优化
转载:大佬博客 最近想到了许多优化spfa的方法,这里想写个日报与大家探讨下 前置知识:spfa(不带任何优化) 由于使用较多 STLSTL ,本文中所有代码的评测均开启 O_2O2 优化 对一些数 ...
最新文章
- linux查看节点使用进程后退出,Linux通过端口号查看使用进程-结束进程
- [转] domeOS 环境搭建 自动化构建部署
- python网上授课_python完整课程
- ARM Exploitation
- Android Platform Codenames, Versions, API Levels, and NDK Releases
- 文本分类的一种对抗训练方法
- virtualbox安装增强功能时【未能加载虚拟光盘】
- bilibili老版本_哔哩哔哩5.13.0旧版本下载-bilibili5.13.0旧版本下载v5.13.0旧版本-西西软件下载...
- 霍夫变换(Hough Transformation)基本思想及MATLAB相关函数
- Ext Gantt甘特图1.2破解及方法
- 12000字解读安踏:DTC中国化的“热血战纪”
- 7-10 分支结构——大小写字母判断 (70 分)
- 一键使 WIN 10进入休眠、睡眠、关机的命令
- 新浪微博短视频服务的优化实践
- 安信可ESP32-CAM摄像头开发demo--局域网拍照、实时视频、人脸识别
- 成绩管理系统课程设计
- SM2椭圆曲线公钥密码算法(Python实现)
- MAC 忘记MYSQL 账户和密码重置
- Pandas时间序列数据处理和datetime模块详细教程
- OA系统:实现添加岗位
热门文章
- 安化云台山风景区旅游攻略必去的景点
- iOS 取相册照片/打开相机
- 大学生数学建模题论文
- 表面粗糙度的基本评定参数是_表面粗糙度评定粗糙度三个评定参数的含义是什么...
- 不止阻击高通,亿咖通还想成为「下个华为车BU」
- 前端入门之(vuex源码解析三)
- 这个“看不见”的机器人,或许就是你未来的同事
- 7-1 创建一个倒数计数线程
- php 猴子补丁,如何解决Composer安装/更新错误:VirtualAlloc()失败:[0x00000008]
- 无线AP的注册上线方式