UVA 11020

题目:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=33058


想清楚增加点p后,会产生的情况,

一,这个点可能本身没有优势,因此直接忽略。二,这个点有优势,则把他加入到集合中,把因这个点的加入而没有优势的点删除。



#include <cmath>
#include <ctime>
#include <iostream>
#include <string>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <cctype>
#include <stack>
using namespace std;
typedef long long LL;
#define EPS 10e-9
#define INF 0x3f3f3f3f
#define REP(i,n) for(int i=0; i<(n); i++)
struct point{
    int a,b;
    bool operator <(const point& t) const {
       return a<t.a||(a==t.a&&b<t.b);
    }
};
multiset<point> s;
multiset<point>::iterator it;
int main(){
   int t,n,ca=1,a,b;
   scanf("%d",&t);
   for(int ca=1;ca<=t;ca++){
       if(ca>1) printf("\n");
       printf("Case #%d:\n",ca);
       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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值