题目描述

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include<bits/stdc++.h>
using namespace std; stack<long long>stk;//存元素
stack<long long>num;//存相同元素数量 (两个栈同步)
stk 9 6 (栈顶)
num 3 2 (栈顶)
备注 (栈中有·3个9) (2个6)  
int n;
long long ans,tmp; //ans 累加器 int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&tmp);
while(!stk.empty() && stk.top() < tmp) //如果栈不为空 且栈顶元素比tmp小 那么看得到栈顶元素
{
stk.pop();
ans += num.top();
num.pop();
}
if(stk.empty())//若元素栈是空的 直接塞进去就好了
{
stk.push(tmp);
num.push();
}else//栈不是空的
{
if(tmp != stk.top())//栈顶元素与读到的元素不相同的情况
{
ans+=;//两人紧挨 肯定能看得到对方 故 累加器加1
stk.push(tmp);
num.push();
}else//栈顶元素与读到的元素相同的时候
if(stk.size() == ) //仅有一个元素
{
ans+=num.top();
int u = num.top();
num.pop();
num.push(u+);
}
else//栈顶元素与读到的元素相同的时候 且 有多个元素
{
ans += num.top();
int u = num.top();
num.pop();
ans += ;
num.push(u+);
}
}
}
printf("%lld\n",ans);
return ;
}

分情况讨论

(1).栈为空:直接把新元素压入就好

(2).栈不为空:1.栈顶元素<tmp

                栈顶元素都看得到

                累加器+=栈顶元素个数

                弹出栈顶元素

        2.栈顶元素=tmp

                <1> 栈中仅有一个元素

                          都看得到

                          stk不变;   tmp的值(唯一的元素的值)+1

                <2>栈中仍有多个元素

                          都看得到

                          stk不变;   tmp的值(唯一的元素的值)+1

                          同时也相当于与相邻元素紧挨 ans+1

        3.栈顶元素>tmp

                由于紧挨着 ans+1

备注:

  1.从上到下依次特判 调整顺序不可以

  2.开long long

  3.注意ans是+1还是+num.tpo();   

                          

  

P1823 [COI2007] Patrik 音乐会的等待 单调栈 洛谷luogu的更多相关文章

  1. 洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找)

    洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1333275 这个题不是很 ...

  2. [COI2007] Patrik 音乐会的等待 (单调栈,模拟)

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

  3. [COI2007] Patrik 音乐会的等待 单调栈

    Code: #include<cstdio> #include<algorithm> #include<iostream> #include<cstring& ...

  4. 洛谷 P1823 [COI2007] Patrik 音乐会的等待

    洛谷 P1823 [COI2007] Patrik 音乐会的等待 洛谷传送门 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A ...

  5. 洛谷 P1823 [COI2007] Patrik 音乐会的等待 题解

    P1823 [COI2007] Patrik 音乐会的等待 题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相 ...

  6. Patrik 音乐会的等待 单调栈的迷茫回忆

    STL 一定要学好 一定要学好,一定要学好!!! 题目链接:https://www.luogu.org/problemnew/show/P1823 我们需要单向查找:用单调栈: 思路:维护一个身高单调 ...

  7. 洛谷P1823 [COI2007] Patrik 音乐会的等待

    https://www.luogu.org/problemnew/show/P1823 自己只会一个log的 设取的人的位置分别是l,r(l<r) 这个做法大概是考虑枚举r,设法对于每个r求出有 ...

  8. 【洛谷P1823】音乐会的等待 单调栈+二分

    题目大意:给定一个长度为 N 的序列,定义两个数 \(a[i],a[j]\) 相互看得见,意味着 \(\forall k\in [i+1,j-1],a[k]\le a[i],a[k]\le a[j]\ ...

  9. luoguP1823 [COI2007] Patrik 音乐会的等待

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

随机推荐

  1. Memcached部署和用法

    一.Memcached简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网 ...

  2. 【Java】用注解实现分发器

    在C/S中,客户端会向服务器发出各种请求,而服务器就要根据请求做出对应的响应.实际上就是客户机上执行某一个方法,将方法返回值,通过字节流的方式传输给服务器,服务器找到该请求对应的响应方法,并执行,将结 ...

  3. Matlab forward Euler demo

    % forward Euler demo % take two steps in the solution of % dy/dt = y, y(0) = 1 % exact solution is y ...

  4. Windows 10 将MySQL5.5升级为MySQL5.7

    最近想学习一下java.找到一个开源项目需要mysql5.7.11+ 升级 电脑上装的是MySQL 5.5,准备直接升级到最新版本的5.7,对于MySQL好像并没有直接升级到最新版本的功能,下载了Wi ...

  5. Python全栈学习_day001知识点

    今日大纲: . 变量. ***** . 常量.** . 注释.*** . 基础数据类型初识(int,str,bool). ***** . 用户输入 input ***** . 流程控制语句if. ** ...

  6. 【CSS学习】--- 盒子模型

    一.前言:这篇只作为本人的笔记,以后慢慢再补充. 页面中的所有元素都可以被看作一个一个的“盒子”.这些盒子都包含了:内容(content).内边距(padding).边框(border)以及外边距(m ...

  7. input上传文件个数控制

    HTML: <h3>请上传[2,5]个文件</h3> <form action="" enctype="multipart/form-dat ...

  8. 【读书笔记】iOS-自定义 URL Scheme 完全指南

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用.   注册自定义 URL Sche ...

  9. React 入门学习笔记整理(九)——路由

    (1)安装路由 React-router React-router提供了一些router的核心api,包括Router, Route, Switch等,但是它没有提供dom操作进行跳转的api. Re ...

  10. SuperMap 三维产品资料一览表

    转自:http://blog.csdn.net/supermapsupport/article/details/68924713 如何能快速地开发项目中的三维功能呢?本文为您提供全方位的三维资料,为您 ...