当前位置: 首页> 汽车> 维修 > 环境设计专业介绍_河北石家庄疫情_网络广告投放方案_郑州网站建设制作公司

环境设计专业介绍_河北石家庄疫情_网络广告投放方案_郑州网站建设制作公司

时间:2025/7/12 6:49:58来源:https://blog.csdn.net/m0_64542522/article/details/143078942 浏览次数: 0次
环境设计专业介绍_河北石家庄疫情_网络广告投放方案_郑州网站建设制作公司

题目描述

给你平面上 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;
} 
关键字:环境设计专业介绍_河北石家庄疫情_网络广告投放方案_郑州网站建设制作公司

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: