题目描述

给定长度为 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 (栈)相关推荐

  1. 栈/队列/分块问卷调查反馈——Weak in the Middle,Cutting Plants,最小公倍数

    文章目录 Weak in the Middle source solution code Cutting Plants source solution code [HNOI2016]最小公倍数 sou ...

  2. IPv6技术精要--第17章双栈和隧道

    文章目录 17.1 双栈技术 17.1.1 基本概念 1.定义 2.应用 3.以 URL 语法表示的 IPv6 地址格式: 17.1.2 配置双栈网络 17.2 隧道技术 17.2.1 基本概念 2. ...

  3. java枚举变量反解析用法

    最近常常有一些项目需要给枚举设值一个int值,以及对int值进行反解析出枚举类型,代码如下: 1 public enum MatchResultEnum { 2 3 /** 4 * 赢 5 */ 6 ...

  4. 算法分析-分治 归并排序,递归插入排序,二分查找

    反正分治的套路就是 相同子问题,递归做,我之前有介绍express源码,其中的中间件使用就是用next()函数一直递归,想看的看我的express源码分析: 分治3步骤: 分解 处理 归并 下面给出归 ...

  5. Python---编程检查并判断密码字符串的安全强度

    编程检查并判断密码字符串的安全强度 password=input("请输入你的密码:") p=list(password) x=0 for i in p:if i == " ...

  6. 使用Python检查密码安全程度

    本文主要演示几种内置用法的用法和代码优化技巧,所以没有使用正则表达式. import string def check(pwd): #密码必须至少包含6个字符 if not isinstance(pw ...

  7. python判断安全密码_python 字符串实例:检查并判断密码字符串的安全强度

    检查并判断密码字符串的安全强度 import string def check(pwd): #密码必须至少包含六个字符 if not isinstance(pwd,str) or len(pwd)&l ...

  8. cf英文名字格式好看的_cf好看的英文名字格式

    cf也是我们常常说的穿越火线,它是一款单人或多人组队射击类网络游戏,玩家们都需选择不同的武器来进行战斗.而在游戏中很多人都会运用英文名字来为游戏起名,而想要为cf起个好看的英文名字格式时,不妨来到小编 ...

  9. cf英文名字格式好看的_cf好看的英文名字格式:、I (~) you ?

    [导语]cf也是我们常常说的穿越火线,它是一款单人或多人组队射击类网络游戏,玩家们都需选择不同的武器来进行战斗.而在游戏中很多人都会运用英文名字来为游戏起名,而想要为cf起个好看的英文名字格式时,不妨 ...

最新文章

  1. 四十六、利用yarn多队列实现hadoop资源隔离
  2. XP硬盘安装Fedora14图文教程
  3. apache camel_探索Apache Camel Core –文件组件
  4. itchat 道歉_人类的“道歉”
  5. HDU 1476 Sudoku Killer
  6. QT3与QT4中uic的使用差异---李家凯老师
  7. javascript常用技巧归纳
  8. ECMAScript:客户端脚本语言的标准
  9. 根据运算符优先级解析SQL规则表达式
  10. 第五:Python发送邮件时获取最新测试报告并发送邮件
  11. postman与Jmeter调用接口
  12. php webservice 上传大文件,JS和WebService大文件上传代码分享
  13. 美区苹果id被禁用原因和解除限制方法
  14. qq拼音输入法下载|qq拼音输入法纯净版下载
  15. android_驱动_qcom_【高通SDM660平台 Android 10.0】(10) --- Camera Sensor lib 与 Kernel Camera Probe 代码分析
  16. Bootstrap模板-Inspinia.2.9.2
  17. android陀螺仪方向,Android中陀螺仪传感器正确旋转值的计算
  18. 什么是 PHP? 为什么用 PHP? 有谁在用 PHP?
  19. cpp+数据结构+设计模式
  20. Springboot+vue项目零食销售商城

热门文章

  1. Java访问修饰符(访问控制符)
  2. Bit-Z 关于交易隐藏及下线说明
  3. BZOJ 3673: 可持久化并查集 by zky
  4. MySQL删除s表命令_SQLServer数据库sql语句中----删除表数据drop、truncate和delete的用法...
  5. 手机适配鸿蒙教程,鸿蒙系统支持手机介绍
  6. mysql 接口访问_MySQL的数据库访问接口-阿里云开发者社区
  7. 流行的开源数据挖掘tool
  8. ICCV 2017 《Illuminating Pedestriant via Simultaneous Detection Segmentation》论文笔记
  9. BZOJ 4422 Cow Confinement (线段树、DP、扫描线、差分)
  10. linux 设计与实现 pdf,Linux库的设计与实现.pdf