sgu 199 Beautiful People (DP-LIS O(nlogn)算法 输出所选元素)
来源:互联网 发布:淘宝drjart天猫旗舰店 编辑:程序博客网 时间:2024/05/20 08:42
199. Beautiful People
time limit per test: 0.25 sec.
memory limit per test: 65536 KB
memory limit per test: 65536 KB
input: standard
output: standard
output: standard
The most prestigious sports club in one city has exactly N members. Each of its members is strong and beautiful. More precisely, i-th member of this club (members being numbered by the time they entered the club) has strength Si and beauty Bi . Since this is a very prestigious club, its members are very rich and therefore extraordinary people, so they often extremely hate each other. Strictly speaking, i-th member of the club Mr X hates j-th member of the club Mr Y if Si ≤ Sj and Bi ≥ Bj or if Si ≥ Sj and Bi ≤ Bj (if both properties of Mr X are greater then corresponding properties of Mr Y, he doesn't even notice him, on the other hand, if both of his properties are less, he respects Mr Y very much).
To celebrate a new 2003 year, the administration of the club is planning to organize a party. However they are afraid that if two people who hate each other would simultaneouly attend the party, after a drink or two they would start a fight. So no two people who hate each other should be invited. On the other hand, to keep the club presti≥ at the apropriate level, administration wants to invite as many people as possible.
Being the only one among administration who is not afraid of touching a computer, you are to write a program which would find out whom to invite to the party.
To celebrate a new 2003 year, the administration of the club is planning to organize a party. However they are afraid that if two people who hate each other would simultaneouly attend the party, after a drink or two they would start a fight. So no two people who hate each other should be invited. On the other hand, to keep the club presti≥ at the apropriate level, administration wants to invite as many people as possible.
Being the only one among administration who is not afraid of touching a computer, you are to write a program which would find out whom to invite to the party.
Input
The first line of the input file contains integer N — the number of members of the club. ( 2 ≤ N ≤ 100,000 ). Next N lines contain two numbers each — Si and Bi respectively ( 1 ≤ Si, Bi ≤ 109 ).
Output
On the first line of the output file print the maximum number of the people that can be invited to the party. On the second line output N integers — numbers of members to be invited in arbitrary order. If several solutions exist, output any one.
Sample test(s)
Input
4 1 1 1 2 2 1 2 2
Output
2
1 4
大致题意:
从俱乐部中选一些人参加派对。每个人都有两个属性。S和B。一些属性高低难以分辨的人之间容易互相嫉妒,不适合一起参加派对。而派对想要邀请俱乐部中尽可能多的人,而每两人之间都需要满足s1<s2 和 b1<b2 才不会互相嫉妒。
问最多能邀请到多少不会互相嫉妒的人,并且输出这些人的编号。
分析:
相当于选中的这些人的两个属性排起来都构成最长上升序列。
那么我们可以先按一个属性从小到大排序好,然后按另一个属性去找其最长上升序列。
因为数据比较大,用LIS的O(n^2)算法一定会超时,所以采用O(nlogn)算法来找LIS,并记录每个元素的前一个,方便输出。
LIS的O(nlogn)算法可以参考
http://www.slyar.com/blog/longest-ordered-subsequence.html~~~
0 0
- sgu 199 Beautiful People (DP-LIS O(nlogn)算法 输出所选元素)
- SGU 199 Beautiful People lis O(nlogn)算法
- sgu 199 beautiful people(nlog 的LIS并输出路径)
- sgu 199 Beautiful People dp
- SGU 199. Beautiful People(最长上升子序列nlogn LIS)
- sgu 199 Beautiful People
- SGU--199 beautiful people
- SGU 199 Beautiful People
- SGU 199. Beautiful People 二维LIS
- LIS-O(NlogN)算法
- ZOJ 2319 Beautiful People(LIS二分法+路径输出)
- LIS的O(nlogn)算法(二分)
- ZOJ2319 Beautiful People(贪心,最长递增子序列nlogn,LIS)
- LIS的O(nLogN)算法
- 用O(nlogn)的算法实现最大上升子序列(LIS)输出.
- ACdream 1216 Beautiful People(二路最长上升子序列 O(nlogn) )
- ACdream 1216 Beautiful People(二维上升子序列 O(nlogn))
- SGU 119 Beautiful People
- select函数(二)
- 当开发者产生一个伟大的想法之后应该做的10件事
- Codeforces Round #262 (Div. 2) B. Little Dima and Equation
- [WARALD美国职业谈]为PHD正名-说说PHD博士就业的一些问题 (全文)
- 循环数组的最大子段和
- sgu 199 Beautiful People (DP-LIS O(nlogn)算法 输出所选元素)
- 看WARALD博客 关于PHD和MASTER比较的摘要
- 欢乐暑假线上编程比赛第三题:轮换数
- 某邻居的WIFI密码
- JDBC 连接MySQL
- UVA - 657 The die is cast
- 并查集+路径压缩(poj1988)
- UVA - 1350 Pinary (递推)
- Codeforces Round #262 (Div. 2) C. Present