UVA 11020 Multiset应用

来源:互联网 发布:淘宝充话费联通 编辑:程序博客网 时间:2024/06/15 16:58

点击打开链接

#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <set>using namespace std;const int M =15010;struct Point{int x;int y;bool operator<(const Point& t)const {return  x<t.x|| (x==t.x && y<t.y); //对x从小到大排序,x相等时按y从小到大排序 }};multiset<Point> S;multiset<Point>::iterator it;int main(){int t;cin>>t;for(int i=1;i<=t;i++){if(i>1) cout<<endl;int n;cin>>n;S.clear();printf("Case #%d:\n",i); while(n--){int a,b;cin>>a>>b;Point P={a,b};it=S.lower_bound(P);//找到第一个  x大于等于px的元素 if(it==S.begin()||(--it)->y>b)// px>x py<y则p有优势 {S.insert(P);//p插入后 淘汰掉一些没有优势的点it=S.upper_bound(P);while(it!=S.end()&& it->y>=b){S.erase(it++);} } cout<<S.size()<<endl;}}return 0;} 


0 0