codeforces319——B. Psychos in a Line(思维+单调栈)

简介: codeforces319——B. Psychos in a Line(思维+单调栈)

原题链接

题意:

20200401134307494.png思路:

力推聚聚博客

确实很思维。

记录每个人第几次被打死的,那么n个人的最大值就是答案。

一个人y如果想被打死,他左边要有一个比他大的数,记作x,那么从x到y的过程,y的次数就是x到y的最大值+1。因为不能只能打死相邻的人,所以要等到x到y之间的人都被打死之后y才能被打死,也就是x到y之间的人的最大次数+1。

用单调栈维护,要注意栈为空的情况。

代码:

int a[maxn],n;
struct node{
    int val,step;
};
stack<node>stk;
int main(){
    n=read();
    for(int i=1;i<=n;i++) a[i]=read();
    int res=0;
    for(int i=1;i<=n;i++){
        int t=0;
        while(stk.size()>0&&stk.top().val<a[i]){
            t=max(t,stk.top().step);
            stk.pop();
        }
        if(stk.empty()) stk.push({a[i],0});
        else stk.push({a[i],t+1});
        res=max(res,stk.top().step);
    }
    out(res);
    return 0;
}
目录
相关文章
|
4天前
|
C++
【洛谷 P1044】[NOIP2003 普及组] 栈 题解(递归+记忆化搜索)
**NOIP2003普及组栈问题**:给定操作数序列1到n,仅允许push(进栈)和pop(出栈)操作。目标是计算所有可能的输出序列总数。输入包含一个整数n(1≤n≤18)。示例输入3,输出5。当队列空时返回1,栈空则只能入栈,栈非空时可入栈或出栈。AC C++代码利用记忆化搜索求解。
8 1
|
7天前
|
算法
$停车场管理系统 栈与队列
$停车场管理系统 栈与队列
8 1
|
3天前
|
缓存 调度
栈和队列的区别
栈和队列的区别
5 0
|
4天前
|
存储 程序员 编译器
堆和栈的区别
堆和栈的区别
|
4天前
|
C++
【洛谷 P1739】表达式括号匹配 题解(栈)
该编程题目要求检查给定的包含字母、运算符和括号的表达式是否括号匹配。输入为一行表达式,以`@`结束。如果括号匹配,输出`YES`,否则输出`NO`。样例包括一个匹配和一个不匹配的表达式。解决方案是使用栈,遇到左括号入栈,遇到右括号时判断栈是否为空,栈空则输出`NO`,否则出栈。当读到`@`时,栈空则输出`YES`,否则输出`NO`。提供的AC代码使用C++实现,通过`stack`处理括号匹配。
7 0
|
4天前
|
存储 Java Python
数据结构===栈
数据结构===栈
|
5天前
|
索引
栈的数组实现
栈的数组实现
5 0
|
10天前
数据结构——栈和队列
数据结构——栈和队列
12 1
|
13天前
|
存储 算法 调度
数据结构与算法-栈篇
数据结构与算法-栈篇
14 3
|
10天前
|
存储 算法 程序员
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
【C++进阶】深入STL之 栈与队列:数据结构探索之旅
18 4

热门文章

最新文章