时间限制:0.25s

空间限制:4M

题意:

有n个人,每个人有两个能力值,只有一个人的两个能力都小于另一个的能力值,这两个人才能共存,求能同时共存的最大人数。


Solution:

显然这是一个两个关键字的最长上升序列。

先按照第一种能力值为第一关键字从小到大,第二能力值为第二关键字从大到小排序(为什么?)

然后就是直接用O(nlogn)的DP就好了

(排序的方法是根据O(nlogn)DP算法中所用到的辅助数组的性质。。。如果对这个算法理解足够的话应该比较容易想到)

code(要用C++提交)

#include <iostream>
#include <algorithm>
#include <utility>
#include <vector>
using namespace std;
int n;
struct node {
int first, second, id;
} f[];
int s[], pre[];
bool cmp (node a, node b) {
if (a.first == b.first) return a.second > b.second;
return a.first < b.first;
}
int main() {
ios::sync_with_stdio ();
cin >> n;
for (int i = ; i <= n; i++) cin >> f[i].first >> f[i].second, f[i].id = i; sort (f + , f + + n, cmp); int ans = , t = ;
for (int t = ; t <= n; t++) {
int l = , r = ans, last = -;
while (l <= r) {
int mid = (l + r) >> ;
if (f[t].second > f[s[mid]].second) {
last = mid + ;
l = mid + ;
}
else
r = mid - ;
}
pre[t] = s[last - ];
if (f[t].second < f[s[last]].second || s[last] == )
s[last] = t;
if (last > ans) ans++;
}
cout << ans << endl;
for (int i = s[ans]; i; i = pre[i])
cout << f[i].id << ' ';
}

SGU 199 Beautiful People(DP+二分)的更多相关文章

  1. [SGU 199] Beautiful People

    [SGU 199] Beautiful People The most prestigious sports club in one city has exactly N members. Each ...

  2. SGU 199 Beautiful People 二维最长递增子序列

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20885 题意: 求二维最长严格递增子序列. 题解: O(n^2) ...

  3. SGU 199 - Beautiful People 最长上升子序列LIS

    要邀请n个人参加party,每个人有力量值strength Si和魅力值 beauty Bi,如果存在两人S i ≤ S j and B i ≥ B j 或者  S i ≥ S j and B i ≤ ...

  4. HDU 3433 (DP + 二分) A Task Process

    题意: 有n个员工,每个员工完成一件A任务和一件B任务的时间给出,问要完成x件A任务y件B任务所需的最短时间是多少 思路: DP + 二分我也是第一次见到,这个我只能说太难想了,根本想不到. dp[i ...

  5. 两种解法-树形dp+二分+单调队列(或RMQ)-hdu-4123-Bob’s Race

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4123 题目大意: 给一棵树,n个节点,每条边有个权值,从每个点i出发有个不经过自己走过的点的最远距离 ...

  6. POJ-2533最长上升子序列(DP+二分)(优化版)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 41944   Acc ...

  7. hdu2993之斜率dp+二分查找

    MAX Average Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. poj3208 Apocalypse Someday 数位dp+二分 求第K(K <= 5*107)个有连续3个6的数。

    /** 题目:poj3208 Apocalypse Someday 链接:http://poj.org/problem?id=3208 题意:求第K(K <= 5*107)个有连续3个6的数. ...

  9. hdu 1025:Constructing Roads In JGShining's Kingdom(DP + 二分优化)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

随机推荐

  1. java 学习连接

    @Repository.@Service.@Controller 和 @Component   注解:http://blog.csdn.net/ye1992/article/details/19971 ...

  2. iOS类的继承关系

  3. android.mk android源码编译

    http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...

  4. CPP变量参数别名

    1,变量起"绰号"的操作称为引用(reference),"绰号"称为引用名,申明引用的语法格式; 变量数据类型 &引用名 = 已申明的变量名; 和C中的 ...

  5. 部署MongoDB扩展并测试使用php简单连接操作之

    1,下载MongoDB数据库扩展介质 wget http://pecl.php.net/get/mongo-1.5.1.tgz 2,tar  zxvf mongo-1.5.1.tgz &&am ...

  6. linux常用命令大全(转)

    由于记忆力有限,把平时常用的Linux命令整理出来,以便随时查阅: linux 基本命令 ls     (list 显示当前目录下文件和目录 ls -l 详细显示 =ll ) [root@linux ...

  7. SQL-LINQ-Lambda语法对照

    SQL LINQ Lambda SELECT *FROM HumanResources.Employee from e in Employees select e Employees .Select ...

  8. mysql inner join,full outer join,left join,right jion

    https://sites.google.com/site/349624yu/courses/mysql/mysqldbgjzcx inner join,full outer join,left jo ...

  9. OS开发网络篇—监测网络状态

    iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行 ...

  10. python的私有变量解析

    在内的内部定义并使用,外部无法訪问,以双下划线作为前作,定义后被python转为 _classname__变量名了 ------------------------------------------ ...