#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;
}
UVA 11020 Multiset应用
最新推荐文章于 2019-04-27 21:54:48 发布
