P1823

news/2024/11/16 21:25:24/文章来源:https://www.cnblogs.com/thirty-two/p/18549834

[COI2007] Patrik 音乐会的等待

题目描述

\(n\) 个人正在排队进入一个音乐会。人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人。

队列中任意两个人 \(a\)\(b\),如果他们是相邻或他们之间没有人比 \(a\)\(b\) 高,那么他们是可以互相看得见的。

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

数据规模与约定

对于全部的测试点,保证 \(1\le\) 每个人的高度 \(< 2^{31}\)\(1 \le n \le 5\times 10^5\)


身为一个普及组选手,对单调栈的利用展现出了普及组的水准,致敬传奇普及老哥 cfm

对于序列上点对统计的问题,一般都是以右端点为计数标准,统计有多少个合法的左端点。这道题也一样:对于 \(b\) 统计有多少 \(a(a<b)\) 使得 \(\max\limits_{j = a+1}^{b - 1}h_j \le \min\{h_a, h_b\}\)

这个式子不好做,把右边拆开讨论一下。

  1. \(h_a > h_b\),即 \(\max\limits_{j = a + 1}^{b-1}h_j < h_b\)。此时显然 \(a\) 只能是“第一个在 \(b\) 之前且大于 \(b\) 的位置”,容易单调栈出来。
  2. \(h_a < h_b\)。类似的思考会发现这样的 \(a\) 就会被 \(b\) 给“堵住”,从而让 \(b\) 之后的看不到,那么我们只需要针对 \(b\) 单独统计即可。具体可以利用单调栈。
  3. \(h_a = h_b\)。在顶统计一次,然后将其合并。
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 5e5;
int a[N + 10], c[N + 10], b[N + 10];
struct node {int val, cnt;
};
int bk[N + 10], fr[N + 10], n;
stack <node> sta;int main() {cin >> n;for(int i = 1; i <= n; i++)cin >> a[i];ll sum = 0;for(int i = 1; i <= n; i++) {node tmp = (node){a[i], 1};while(!sta.empty() && sta.top().val <= a[i]) {if(sta.top().val == a[i]) tmp.cnt += sta.top().cnt;sum += sta.top().cnt;sta.pop();}if(!sta.empty()) sum++;sta.push(tmp);}cout << sum << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/834798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20222325 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 本实践目标是掌握metasploit的用法。 指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,search一…

[Linux]gdb基本使用

gdb基本使用 前提 gcc/g++编译出的程序默认是realease版本,要使用gdb调试,首先要在编译的时候加上-g选项。使用readelf -S [程序名]查看可执行文件的节区信息。使用gdb [程序名]:开始调试。q:退出调试。list/l [行号]:从给定的位置显示程序的源代码,每次十行。break/b [行…

美团商家联系电话采集软件团购外卖信息批量提取器

定义目标:明确需要采集的数据,如商家名称、地址、评分、销量等。 分析页面结构:通过浏览器的开发者工具,分析美团团购或外卖页面的HTML结构,找出包含所需数据的标签。 模拟用户请求:使用requests库模拟用户访问美团页面,可能需要处理登录、反爬虫机制(如Cookies、Heade…

# 团队作业4——项目冲刺-6

团队作业4——项目冲刺-6信息项 内容课程名称 广工计院计科34班软工作业要求位置 作业要求作业目标 在七天敏捷冲刺中,完成工大严选开发,记录每日进展和问题,更新燃尽图、签入代码,并发布集合日志总结成果GitHub链接 GitHub一、团队简介队名:小飞棍队团队成员:姓名 学号罗…

20222427 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 1.1 本周内容总结使用了Metasploit框架,其是一个功能强大的渗透测试框架。在使用的过程当中,Metasploit 提供了种类繁多的攻击模块,涵盖了远程代码执行、服务拒绝、提权等多种攻击方式,支持对多种操作系统和应用程序进行测试。除了漏洞利用,它还具备强大的后渗…

20222306 2024-2025-1《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1内容回顾总结 这周都重点在于Metasploit工具的使用,我深入了解了对其功能和使用流程。Metasploit 是一个功能强大的渗透测试框架,广泛应用于网络安全领域。它为安全专家、渗透测试人员和红队提供了一个全面的工具集,支持漏洞利用、攻击模拟和安全评估。Metaspl…

关于HDFS路径文件夹名称的问题

问题发现 ​ 最开始的需求:修改/origin_data/gmall/db目录下所有以inc结尾的文件夹里的文件夹(名称为2024-11-15)修改为2020-6-14 问gpt写了个脚本: #!/bin/bash# 遍历 /origin_data/gmall/db 下所有以 "inc" 结尾的文件夹 for dir in $(hdfs dfs -ls /origin_da…

2024数据采集与融合技术实践-作业4

作业①: 1)使用Selenium框架+ MySQL数据库存储技术路线爬取“沪深A股”、“上证A股”、“深证A股”3个板块的股票数据信息。 1.核心代码描述 from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDri…

第七章课后习题

习题7.1点击查看代码 import numpy as np from scipy.interpolate import interp1d from scipy.integrate import quad import matplotlib.pyplot as pltg = lambda x: (3 * x ** 2 + 4 * x + 6) * np.sin(x) / (x ** 2 + 8 * x + 6) x0 = np.linspace(0, 10, 1000) y0 = g(x0)…

第八章课后习题

习题8.4点击查看代码 from scipy.integrate import odeint import numpy as np import matplotlib.pyplot as plt # 设置 Matplotlib 不使用 LaTeX plt.rc(font, size=15) plt.rc(text, usetex=False)# 定义微分方程系统 dz = lambda z, t: [-z[0]**3 - z[1], z[0] - z[1]**3]#…

Solidity学习笔记-1

01.Hello World 开发工具 Remix // SPDX-License-Identifier: MIT // 软件许可,不写编译会出现警告 // 版本,“0.8.21”-->不能小于这个版本,"^"-->不能大于0.9.0 pragma solidity ^0.8.21; // 创建合约 contract HelloWorld {string public helloworld = &quo…

gofiber: 使用模板

一,安装模板库 $ go get github.com/gofiber/template/html/v2 go: downloading github.com/gofiber/template/html/v2 v2.1.2 go: downloading github.com/gofiber/utils v1.1.0 go: added github.com/gofiber/template/html/v2 v2.1.2 go: added github.com/gofiber/utils v…