http://acm.hdu.edu.cn/showproblem.php?pid=4268
学会了multiset的用法,与set不同的是这个可以插入相同元素
对w排序,对合适的w用multiset插入对应的h,logn完成查找
#include <iostream> #include <cstdio> #include <cstring> #include <vector> #include <cmath> #include <set> using namespace std ; struct node { int w,h ; }a[100005],b[100005] ; int cmp(node x,node y) { if(x.w==y.w)return x.h<y.h ; return x.w<y.w ; } int main() { int t ; scanf("%d",&t) ; while(t--) { int n ; scanf("%d",&n) ; for(int i=0 ;i<n ;i++) scanf("%d%d",&a[i].w,&a[i].h) ; for(int i=0 ;i<n ;i++) scanf("%d%d",&b[i].w,&b[i].h) ; sort(a,a+n,cmp) ; sort(b,b+n,cmp) ; int ans=0 ; multiset <int> s ; int j=0 ; for(int i=0 ;i<n ;i++) { while(j<n && b[j].w<=a[i].w) { s.insert(b[j].h) ; j++ ; } if(!s.size())continue ; multiset <int> :: iterator it=s.upper_bound(a[i].h) ; if(it!=s.begin()) { it-- ; s.erase(it) ; ans++ ; } } printf("%d\n",ans) ; } return 0 ; }