当前位置: 首页 > article >正文

[单调栈] 统计点数

题目描述

给你平面上 N N N 个点,求有多少个点右上方没有其他点(包括正上方和正右方)。

输入格式

一行 N N N,表示点的数量。
接下来 N N N 行,每行两个数 x , y x, y x,y,表示一个点的坐标。

输出格式

一行表示答案。

样例

样例输入1:

4
1 0
0 1
1 1
0 0

样例输出1:

1

数据范围

对于 50 % 50\% 50% 的数据, N ≤ 1000 N \le 1000 N1000
对于 100 % 100\% 100% 的数据, N ≤ 100000 N \le 100000 N100000 x x x y y y 的绝对值在 int 范围,不会出现两个坐标相同的点。

题解

假设选了 ( x , y ) (x, y) (x,y),则下一次选的点的坐标要么 x x x 大于当前的 x x x,要么 y y y 大于当前的 y y y x x x 小于当前的 x x x
x x x 坐标从大到小排序,这样只用考虑第 2 2 2 种情况了。
将每个点依次遍历,加入单调栈进行维护 y y y,最后输出单调栈的长度即可。

代码:

stack<int> st;
pair<int, int> a[1000010];
int main(){
	scanf("%d", &n);
	for(int i = 1; i <= n; ++ i){
		scanf("%d %d", &a[i].first, &a[i].second);
	}
	//排序
	sort(a + 1, a + n + 1);
	//维护单调栈
	for(int i = 1; i <= n; ++ i){
		while(!st.empty() && st.top() <= a[i].second){
			st.pop();
		}
		st.push(a[i].second);
	}
	printf("%d", st.size());
	return 0;
} 

http://www.kler.cn/news/361988.html

相关文章:

  • 如何通过 Service Mesh 构建高效、安全的微服务系统
  • oracle数据库---基本查询(单表查询、多表查询、子查询、分页查询、oracle内置函数、行列转换、集合运算)
  • pandas 数据分析实战
  • VMware下安装Centos 7.6
  • Elasticsearch文档操作
  • 代码工艺:写代码的好习惯
  • 如何使用 matplotlib 在 Python 3 中绘制数据
  • 定制开发 AI 智能名片 S2B2C 商城系统小程序:选择靠谱第三方开发商的重要性
  • 给el-dialog的整体加动态class
  • Hadoop 3.4.0 安装与WordCount示例
  • 重学SpringBoot3-Reactive-Streams规范
  • 基于ADC方法的系统效能评估代码实现
  • Linux_VI、VIM编辑器
  • 如何优雅解决Go版本安装问题及与Oracle 11g的兼容性挑战20241017
  • React是如何工作的?
  • [实时计算flink]DataStream连接器设置方法
  • Linux中的socket文件和网络变成中的socket异同点
  • Python爬取京东商品信息,详细讲解,手把手教学(附源码)
  • LUCEDA IPKISS Tutorial 78:自定义Taper
  • 力扣 143.重排链表【详细手写】
  • 华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-16
  • 英伟达开源超强模型Nemotron-70B;OpenAI推出Windows版ChatGPT桌面客户端
  • wps安装教程
  • 在Jmeter中的JSR223 PreProcessor使用javascript实战
  • ubuntu20 工作区独立