• 洛谷 P1823 音乐会的等待


    题目描述

    N个人正在排队进入一个音乐会。人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人。队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的。

    写一个程序计算出有多少对人可以互相看见。

    输入输出格式

    输入格式:

    输入的第一行包含一个整数N (1 ≤ N ≤ 500 000), 表示队伍中共有N个人。

    接下来的N行中,每行包含一个整数,表示人的高度,以毫微米(等于10的-9次方米)为单位,每个人的调度都小于2^31毫微米。这些高度分别表示队伍中人的身高。

    输出格式:

    输出仅有一行,包含一个数S,表示队伍中共有S对人可以互相看见。

    输入输出样例

    输入样例#1:
    7 
    2 
    4 
    1 
    2 
    2 
    5 
    1
    输出样例#1:
    10

    说明

    数据制作: @w

    首先有基础的n-1对 再用单调栈维护 一个不升序列 弹出一个数 ans就加1 

    然而只有0分

    正解也是栈 ,只是不同的处理

    因此,对于新加入单调栈的一个元素,我们分三种情况讨论:

    1、新元素num比stack[top]小:直接加入栈,只能与栈首配对,ans加一

    2、新元素num与stack[top]相等:可以与栈首所有相等元素配对,ans加栈中与栈首元素相等的数的个数,同时ans还应再加一,因为num还能与栈中第一个比Num大的数配对

    3、新元素num比stack[top]大:不断弹出元素,每弹一个ans加一,一直弹到num <= stack[top],同2理进行判断即可。

     1 #include <ctype.h>
     2 #include <cstdio>
     3 
     4 const int MAXN=500010;
     5 
     6 int n,top,ans,x;
     7 
     8 int stack[MAXN];
     9 
    10 inline void read(int&x) {
    11     register char c=getchar();
    12     for(x=0;!isdigit(c);c=getchar());
    13     for(;isdigit(c);x=x*10+c-48,c=getchar());
    14 }
    15 
    16 int hh() {
    17     read(n);
    18     for(int i=1;i<=n;++i) {
    19         read(x);
    20         int t=0;
    21         while(top&&stack[top]<x) --top,++ans;
    22         while(x==stack[top]&&top) --top,++ans,++t;
    23         if(top) ++ans;
    24         top+=t;
    25         stack[++top]=x;
    26     }
    27     printf("%d
    ",ans);
    28     return 0;
    29 }
    30 
    31 int sb=hh();
    32 int main() {;}
    代码


    作者:乌鸦坐飞机
    出处:http://www.cnblogs.com/whistle13326/
    新的风暴已经出现 怎么能够停止不前 穿越时空 竭尽全力 我会来到你身边 微笑面对危险 梦想成真不会遥远 鼓起勇气 坚定向前 奇迹一定会出现

     
  • 相关阅读:
    通过注册表实现开机自启的取消
    数据库为什么要使用B+树
    PHP的一种缓存方案静态化
    wordpress源码阅读
    最近在搞的东西有点多Gradle,Python,java,groove搞的脑子都要炸了,还得了流感。满满的负能量。
    编写一个自己的PHP框架(一)写在前面
    cookie,session机制
    __autoload和spl_autoload_register区别
    _initialize()和__construct()
    在往数据库中插入复杂的字符串时,单双引号混用经常会搞的很乱
  • 原文地址:https://www.cnblogs.com/whistle13326/p/7391019.html
Copyright © 2020-2023  润新知