UVA 110020 Efficient Solutions (STL)
2015-09-13 18:12
253 查看
把一个人看出一个二维的点,优势的点就是就原点为左下角,这个点为右上角的矩形,包含除了右上角以外边界,其他任意地方不存在点。
那么所有有优势的点将会形成一条下凹的曲线。
因为可能有重点,用multiset,按照x优先,相同时再比较y的顺序排序,动态维护满足条件的总人数。
当新加的P点的y坐标大于左边的点的时候没有优势,忽略,用lower_bound判断一下。
当新加的P点有优势,但是可能使得其他的的点失去优势,依次把后面的点不满足条件的点删除。
红黑树好复杂。
那么所有有优势的点将会形成一条下凹的曲线。
因为可能有重点,用multiset,按照x优先,相同时再比较y的顺序排序,动态维护满足条件的总人数。
当新加的P点的y坐标大于左边的点的时候没有优势,忽略,用lower_bound判断一下。
当新加的P点有优势,但是可能使得其他的的点失去优势,依次把后面的点不满足条件的点删除。
红黑树好复杂。
#include<bits/stdc++.h> using namespace std; struct Point { int x,y; bool operator < (const Point & r) const { return x < r.x || ( x == r.x && y < r.y ); } }; multiset<Point> S; int main() { int T, kas = 0; scanf("%d",&T); while(T--){ if(kas) puts(""); int n; scanf("%d",&n); printf("Case #%d:\n",++kas); S.clear(); while(n--){ Point P; scanf("%d%d",&P.x,&P.y); auto it = S.lower_bound(P); if(it == S.begin() || (--it)->y > P.y){ it = S.insert(P); while(it != S.end() && *it == P) it++; while(it != S.end() && it->y >= P.y) S.erase(it++); } printf("%d\n",S.size()); } } return 0; }
相关文章推荐
- SSIS的DelayValidation属性
- CentOS 7.0 下 源码编译安装PostgreSQL
- hdu 5443 The Water Problem 线段树
- boost库asio详解8——几个TCP的简单例
- Centos7 安装kilo-8 Network(neutron)
- Linux进程管理之SMP负载平衡
- 软工之概况
- resources_pc
- rails 安装在mac 2015-09-12
- 解决在windows的eclipse上面运行WordCount程序出现的一系列问题详解
- 2015ACM/ICPC Asia Regional Changchun Online /HDU 5438 图
- 系统批量运维管理工具pexpect
- 2015长春网络赛1001 - HDU5433 - Alisha’s Party (模拟)
- Unity T4M
- hdu-5434 Peace small elephant
- Landslide win for PAP in general election
- hdu 5442 Favorite Donut 后缀数组
- CF #296 (Div. 1) B. Clique Problem 贪心(构造)
- [转] 彼得林奇:最珍贵的成长股投资精髓
- 通达OA 小飞鱼工作流在线培训教程(九)流程设计(第一部分)