SGU 199. Beautiful People 二维LIS
2014-09-21 22:58
330 查看
第一维排序 第二维LIS
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int dp[100010]; int p[100010]; struct node { int x, y, id; }a[100010]; bool cmp(node a, node b) { if(a.x != b.x) return a.x < b.x; return a.y > b.y; } void print(int x) { if(p[x] == -1) { printf("%d", a[x].id); return; } print(p[x]); printf(" %d", a[x].id); } int main() { int n; while(scanf("%d", &n) != EOF) { memset(dp, -1, sizeof(dp)); memset(p, -1, sizeof(p)); for(int i = 1; i <= n; i++) { scanf("%d %d", &a[i].x, &a[i].y); a[i].id = i; } sort(a+1, a+n+1, cmp); dp[1] = 1; int len = 1; for(int i = 2; i <= n; i++) { int l = 1, r = len; while(l <= r) { int m = (l + r) >> 1; if(a[dp[m]].y < a[i].y) l = m+1; else r = m-1; } dp[l] = i; p[i] = dp[l-1]; if(l > len) len = l; } //sort(dp+1, dp+len+1); printf("%d\n", len); print(dp[len]); puts(""); } return 0; }
相关文章推荐
- SGU 521 North-East ( 二维LIS 线段树优化 )
- sgu 199 beautiful people(nlog 的LIS并输出路径)
- SGU 199 Beautiful People 二维最长递增子序列
- SGU 199 - Beautiful People 最长上升子序列LIS
- SGU 199 Beautiful People lis O(nlogn)算法
- SGU - 199(最长不下降子序列)
- SGU 199 Beautiful People(DP+二分)
- sgu100~199题解
- hdu1069 Monkey and Banana(二维LIS)
- 20161026的考试】KMP,二维LIS,DAG删一个点求最长路径最小值(BZOJ 3832)
- acd - 1216 - Beautiful People(二维LIS)
- Gym-100820 Racing Gems(二维LIS)
- Gym100820G/UVALive7374 Racing Gems 二维LIS 思维题
- ZOJ Problem Set - 2319 Beautiful People || sgu 199
- ACdream 1216——Beautiful People——————【二维LIS,nlogn处理】
- SGU 199. Beautiful People(最长上升子序列nlogn LIS)
- jdfz-2764 二维LIS
- sgu 199 Beautiful People
- ZOJ 2319 (二维的LIS)
- Gym 101246.H - “North-East” (二维LIS变形)