multise内部结构就是一个Binary Search Tree,要重载<操作符,这个第一次写,用起来太生疏了。
#include <cstdio>
#include <set>
using namespace std;
struct Point{
int a,b;
//Point(int a1=0,int b1=0):a(a1),b(b1){}
bool operator< (const Point& rhs) const {
return a< rhs.a || (a==rhs.a &&b< rhs.b);
}
};
multiset<Point> S;
multiset<Point>::iterator it;
int main()
{
freopen("1.in","r",stdin);
int T;
scanf("%d",&T);
for (int kase=1;kase<=T;kase++){
if (kase>1) printf("\n");
printf("Case #%d:\n",kase);
int n,a,b;
scanf("%d",&n);
S.clear();
while (n--){
scanf("%d%d",&a,&b);
Point P=(Point){a,b};
it = S.lower_bound(P);
if (it == S.begin() || (--it)->b > b) {
S.insert(P);
it = S.upper_bound(P);
while (it !=S.end() && it->b >= b) S.erase(it++);
}
printf("%d\n",S.size());
}
}
return 0;
}