您的位置:首页 > 其它

[HDU 4268](长春Online 1002) set+map + 贪心

2012-09-13 01:54 525 查看
#include <iostream>
#include <stdio.h>
#include <map>
#include <set>
#include <string.h>
#include <algorithm>
using namespace std;
map< int , int > Meng;
set< int > zhu;
const int N = 200000;
struct Men{
int l,r;
bool operator < (const Men & A) const{
if (l!=A.l) return l<A.l;
return r<A.r;
}
void input(){
scanf("%d%d",&l,&r);
}
}p
,q
;
int n;
void solve(){
Meng.clear();
zhu.clear();
scanf("%d",&n);
for (int i = 1 ; i <= n ; ++ i) p[i].input();
for (int i = 1 ; i <= n ; ++ i) q[i].input();
sort(p + 1 , p + 1 + n);
sort(q + 1 , q + 1 + n);

int j=1,ans = 0;
for (int i = 1 ; i <= n ; ++ i){
while(q[j].l <= p[i].l && j <= n){
zhu.insert(-q[j].r);
Meng[-q[j].r]++;
j++;
}
set<int> :: iterator iter=zhu.lower_bound(-p[i].r);
if (iter != zhu.end()){
++ans;
int now = *iter;
--Meng[now];
if (Meng[now]==0){
zhu.erase(now);
}
}
}
printf("%d\n",ans);
}
int main(){
int _;
cin >> _;
while ( _-- ) solve();
}


lower_bound()返回一个 iterator 它指向在[first,last)标记的有序序列中可以插入value,而不会破坏容器顺序的第一个位置,而这个位置标记了一个大于等于value
的值。

按h第一关键字w第二关键字排序,每次找到最大的<=p[i].w的删除。set和map用好了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: