• 蓝桥杯模拟赛5 附J题代码


    J描述

    JM自从学习了约瑟夫问题,就特别感兴趣,研究了很久。设计了一个类似的游戏,取名叫做冷嘲热讽。

    总共有NN个人参与游戏,一字排开,从左往右编号1,2,...,N12...N,每一个人初始有一个能力值A_iAi

    每一轮,每一个人同时向嘲讽右边的人,如果被嘲讽的能力值比嘲讽的人大(A_i < A_{i + 1}Ai<Ai+1),则被嘲讽的人淘汰出局。

    一轮结束,没被淘汰的人向左靠齐,调整站位,重新编号1,2,...,12...,进入下一轮。

    当不再会有人被淘汰时,游戏结束。

    现在JM想知道,这个游戏要多少轮才会结束。你能帮帮他吗?

    输入

    第一行输入11个整数NN,表示总共有NN个人参加游戏。

    第二行NN个整数A_iAi

    输出

    一个整数,表示游戏要多少轮才会结束。

    样例

    输入

    复制

     

    7
    6 5 8 4 7 10 9
    

    输出

    复制

     

    2

    输入

    复制

     

    5
    2 4 6 8 3

    输出

    复制

     

    2

    输入

    复制

     

    3
    3 2 1

    输出

    复制

     

    0

    提示

    样例1解释

    初始状态:6 5 8 4 7 10 9

    第一轮:6 5 4 9

    第二轮:6 5 4

    样例2解释

    初始状态:2 4 6 8 3

    第一轮:2 3

    第二轮:2

    数据规模

    30\%30%的数据,满足1≤N≤10^41N104;

    50\%50%的数据,满足 1≤N≤10^51N105;

    100\%100%的数据,满足1≤N≤10^6, 0≤Ai≤10^91N106,0Ai109.

    #include<iostream>
    using std::max;
    const int N=1e6+5;
    int n,a[N],s[N],q[N],top,ans;
    int main(){
        scanf("%d",&n);
        for(int i=1;i<=n;i++) scanf("%d",a+i);
        for(int i=1;i<=n;i++){
            int cnt=0;
            for(;top&&s[top]>=a[i];top--) cnt=max(cnt,q[top]);
            if(!top) cnt=-1;cnt++;
            s[++top]=a[i];
            q[top]=cnt;
            ans=max(ans,cnt);
        }
        printf("%d
    ",ans);
        return 0;
    }

  • 相关阅读:
    PHP 8.0 带来的新特性
    do sth 之 提取了一份文档
    Java入门15---网络编程
    Java入门14---logback
    限流策略
    JConsole 可视化工具
    SpringBoot注解---6.声明式事务
    SpringBoot注解---5.AOP
    SpringBoot注解---4.扩展原理
    SpringBoot注解---2.组件赋值
  • 原文地址:https://www.cnblogs.com/shenben/p/12699244.html
Copyright © 2020-2023  润新知