标签:
2 2 1 2 3 4 2 3 4 5 3 2 3 5 7 6 8 4 1 2 5 3 4
1 2
题意:两组卡片,第一组的某一张卡片的长并且宽大于等于第二组某一张卡片的长和宽(x,y), 加1;
先sort排序下,利用multiset去存第二组的y,multiset容器可以存相同的元素
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #include<set> 7 #include<map> 8 #include<queue> 9 #include<vector> 10 //#define INF 0x3f3f3f3f 11 #define N 100005 12 typedef long long ll; 13 using namespace std; 14 struct node{ 15 int x; 16 int y; 17 }a[N],b[N]; 18 bool cmp(node aa,node bb){ 19 if(aa.x==bb.x){ 20 return aa.y<bb.y; 21 } 22 else 23 return aa.x<bb.x; 24 } 25 int main() 26 { 27 int t,n; 28 scanf("%d",&t); 29 int i,j; 30 while(t--) 31 { 32 scanf("%d",&n); 33 for(i=0;i<n;i++) 34 scanf("%d%d",&a[i].x,&a[i].y); 35 sort(a,a+n,cmp); 36 for(i=0;i<n;i++) 37 scanf("%d%d",&b[i].x,&b[i].y); 38 sort(b,b+n,cmp); 39 multiset<ll>st; 40 multiset<ll>::iterator it; 41 int ans=0; 42 st.clear(); 43 j=0; 44 for(i=0;i<n;i++){ 45 while(a[i].x>=b[j].x&&j<n){ 46 st.insert(b[j].y); 47 j++; 48 } 49 if(st.empty()) 50 continue; 51 it=st.upper_bound(a[i].y); 52 if(it!=st.begin()) 53 { 54 it--; 55 ans++; 56 st.erase(it); 57 } 58 } 59 printf("%d\n",ans); 60 } 61 }
标签:
原文地址:http://www.cnblogs.com/Aa1039510121/p/5924797.html