17-比赛1 A - Weak in the Middle (栈)
题目描述
给定长度为 N 的序列 A。每天,序列 A 中所有比两侧元素都小的元素都会消失。
对于原序列中所有元素,请求出它会在第几天之后消失(天数从 1 开始计算),或者指出它不
会消失。
数据范围
1 ≤ T ≤ 1, 000
1 ≤ N ≤ 1e5
1 ≤ Ai ≤ 1e9
输入格式
输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。
每组数据的第一行包含一个整数 N。第二行包含 N 个整数 A1, A2, . . . , AN。
输出格式
对于每组数据,输出一行,包含 N 个整数。第 i 个整数代表第 i 个元素在第几天消失;如果
它不会消失,则应当为 0。
样例输入
1
6
3 2 5 4 1 7
样例输出
0 1 0 2 1 0
========================================================================================================================================================
关键词 : 栈
当时比赛未解决的题目
学长的题解 :
因为需要计算出在第几天被删除,暴力的做法必然会导致超时;
因此可以用栈来简化,求出最后剩下的;
设当前处理的数为 a[i],栈顶元素为 st[top]
如果 st[top]-1>st[top]<a[i];
则 删除栈顶元素 将 a [i] 压入栈
被删除的天数则考虑反证法,某一个数a[i]很大 , 多次参与 删除,则最后 一个因为a[i] 被删除的数的天数一定是 max(a[i]参与过的次数,该数参与过的次数) + 1 ,a[i] 参与的次数又发生变化。
========================================================================================================================================================
代码实现如下
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N = 1e5 + 10; 4 5 int ans[N],a[N],st[N],Max[N],top; 6 7 int main() 8 { 9 int T; scanf("%d",&T); 10 while(T--) 11 { 12 int n; 13 scanf("%d",&n); 14 for(int i = 1;i <= n ;++i) ans[i] = Max[i] = 0; top = 0; //初始化 15 for(int i = 1;i <= n ;++i) scanf("%d",a + i); 16 for(int i = 1;i <= n ;++i){ 17 while(top>=2&&a[st[top]]<a[st[top-1]]&&a[st[top]] < a[i]) 18 { 19 ans[st[top]] = max(Max[st[top-1]],Max[st[top]])+1; //当前被删除的次数为max(前一位参与的次数,栈顶参与的次数)+1 20 Max[st[top-1]] = ans[st[top]]; //前一位参与了这次删除,次数变化 21 --top; 22 } 23 st[++top] = i; 24 } 25 for(int i = 1;i <= n;++i) printf(i==n?"%d\n":"%d ",ans[i]); 26 } 27 28 return 0; 29 }
转载于:https://www.cnblogs.com/darkboy/p/9382095.html
17-比赛1 A - Weak in the Middle (栈)相关推荐
- 栈/队列/分块问卷调查反馈——Weak in the Middle,Cutting Plants,最小公倍数
文章目录 Weak in the Middle source solution code Cutting Plants source solution code [HNOI2016]最小公倍数 sou ...
- IPv6技术精要--第17章双栈和隧道
文章目录 17.1 双栈技术 17.1.1 基本概念 1.定义 2.应用 3.以 URL 语法表示的 IPv6 地址格式: 17.1.2 配置双栈网络 17.2 隧道技术 17.2.1 基本概念 2. ...
- java枚举变量反解析用法
最近常常有一些项目需要给枚举设值一个int值,以及对int值进行反解析出枚举类型,代码如下: 1 public enum MatchResultEnum { 2 3 /** 4 * 赢 5 */ 6 ...
- 算法分析-分治 归并排序,递归插入排序,二分查找
反正分治的套路就是 相同子问题,递归做,我之前有介绍express源码,其中的中间件使用就是用next()函数一直递归,想看的看我的express源码分析: 分治3步骤: 分解 处理 归并 下面给出归 ...
- Python---编程检查并判断密码字符串的安全强度
编程检查并判断密码字符串的安全强度 password=input("请输入你的密码:") p=list(password) x=0 for i in p:if i == " ...
- 使用Python检查密码安全程度
本文主要演示几种内置用法的用法和代码优化技巧,所以没有使用正则表达式. import string def check(pwd): #密码必须至少包含6个字符 if not isinstance(pw ...
- python判断安全密码_python 字符串实例:检查并判断密码字符串的安全强度
检查并判断密码字符串的安全强度 import string def check(pwd): #密码必须至少包含六个字符 if not isinstance(pwd,str) or len(pwd)&l ...
- cf英文名字格式好看的_cf好看的英文名字格式
cf也是我们常常说的穿越火线,它是一款单人或多人组队射击类网络游戏,玩家们都需选择不同的武器来进行战斗.而在游戏中很多人都会运用英文名字来为游戏起名,而想要为cf起个好看的英文名字格式时,不妨来到小编 ...
- cf英文名字格式好看的_cf好看的英文名字格式:、I (~) you ?
[导语]cf也是我们常常说的穿越火线,它是一款单人或多人组队射击类网络游戏,玩家们都需选择不同的武器来进行战斗.而在游戏中很多人都会运用英文名字来为游戏起名,而想要为cf起个好看的英文名字格式时,不妨 ...
最新文章
- 四十六、利用yarn多队列实现hadoop资源隔离
- XP硬盘安装Fedora14图文教程
- apache camel_探索Apache Camel Core –文件组件
- itchat 道歉_人类的“道歉”
- HDU 1476 Sudoku Killer
- QT3与QT4中uic的使用差异---李家凯老师
- javascript常用技巧归纳
- ECMAScript:客户端脚本语言的标准
- 根据运算符优先级解析SQL规则表达式
- 第五:Python发送邮件时获取最新测试报告并发送邮件
- postman与Jmeter调用接口
- php webservice 上传大文件,JS和WebService大文件上传代码分享
- 美区苹果id被禁用原因和解除限制方法
- qq拼音输入法下载|qq拼音输入法纯净版下载
- android_驱动_qcom_【高通SDM660平台 Android 10.0】(10) --- Camera Sensor lib 与 Kernel Camera Probe 代码分析
- Bootstrap模板-Inspinia.2.9.2
- android陀螺仪方向,Android中陀螺仪传感器正确旋转值的计算
- 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?
- cpp+数据结构+设计模式
- Springboot+vue项目零食销售商城
热门文章
- Java访问修饰符(访问控制符)
- Bit-Z 关于交易隐藏及下线说明
- BZOJ 3673: 可持久化并查集 by zky
- MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...
- 手机适配鸿蒙教程,鸿蒙系统支持手机介绍
- mysql 接口访问_MySQL的数据库访问接口-阿里云开发者社区
- 流行的开源数据挖掘tool
- ICCV 2017 《Illuminating Pedestriant via Simultaneous Detection Segmentation》论文笔记
- BZOJ 4422 Cow Confinement (线段树、DP、扫描线、差分)
- linux 设计与实现 pdf,Linux库的设计与实现.pdf